从地平线中的keystone获取身份验证令牌

2024-05-20 10:10:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用horizon从keystone获取auth令牌,然后想将该auth令牌传递给我支持的代码。

我不知道怎么弄到这个,请帮帮我。

我读了很多文章和博客,但我找不到答案。请把我指向正确的方向。


Tags: 答案代码authkeystone文章方向指向horizon
3条回答

最简单的方法是使用Rest客户机登录并从响应中获取令牌。我喜欢Firefox RESTClient插件,但是你可以使用任何你想要的客户端。

  • 向Openstack标识URL发送请求:

    POST keystone_ip:port/version/tokens
    

    (例如127.0.0.1:5000/v2.0/tokens

    带标题:

    Content-Type: application/json
    

    和身体:

    {
        "auth": {
            "tenantName": "enter_your_tenantname",
            "passwordCredentials": {
                "username": "enter_your_username",
                "password": "enter_your_password"
            }
        }
    }
    

    注意:如果您不确定什么是正确的标识(keystone)URL,可以手动登录Horizon并查找API端点列表。

  • 响应体将包括如下内容:

    {
        "token": {
            "issued_at": "2014-02-25T08:34:56.068363",
            "expires": "2014-02-26T08:34:55Z",
            "id": "529e3a0e1c375j498315c71d08134837"
        }
    }
    
  • 在新的rest调用中使用返回的令牌id作为头。例如,要获取服务器列表,请使用请求:

    GET compute_endpoint_ip:port/v2/tenant_id/servers
    

    带标题:

    X-Auth-Token: 529e3a0e1c375j498315c71d08134837
    Content-Type: application/json
    

您可以使用python-keystoneclient。要对用户进行身份验证,请使用

 username='admin'
 password='1234'
 tenant_name='admin'
 auth_url='http://127.0.0.1:5000/v2.0'
 keystone = client.Client(username=username, password=password, tenant_name=tenant_name, auth_url=auth_url)

一旦用户通过身份验证,就会生成一个令牌。客户机上的auth_ref属性(本例中为keystone变量)将为您提供一个类似字典的结构,其中包含有关该令牌的所有信息,这将使您能够重用该令牌,或者在您的情况下将其传递给后端。

token_dict = keystone.auth_ref

现在,token_dict是可以传递给后端的变量。

作为一个如何做到这一点的例子:

import keystoneclient.v2_0.client as ksclient
# authenticate with keystone to get a token

keystone = ksclient.Client(auth_url="http://192.168.10.5:35357/v2.0",
                           username="admin",
                           password="admin",
                           tenant_name="admin")


token = keystone.auth_ref['token']['id']

# use this token for whatever other services you are accessing.
print token

相关问题 更多 >