我想使用horizon从keystone获取auth令牌,然后想要将该身份验证令牌传递给我支持的代码。
我不知道怎么弄这个,请帮帮我。
我阅读了许多文章和博客博客,但我无法找到答案。请指出我正确的方向。
答案 0 :(得分:6)
最简单的方法是使用Rest客户端登录并从响应中获取令牌。我喜欢Firefox RESTClient插件,但您可以使用任何您想要的客户端。
向Openstack身份网址发布请求:
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"
}
}
在新的休息调用中使用返回的标记ID作为标头。例如,要获取服务器列表,请使用请求:
GET compute_endpoint_ip:port/v2/tenant_id/servers
带标题的:
X-Auth-Token: 529e3a0e1c375j498315c71d08134837
Content-Type: application/json
答案 1 :(得分:2)
您可以使用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是您可以传递给后端的变量。
答案 2 :(得分:1)
转到已安装Keystone服务的节点。打开vi /etc/keystone/keystone.conf
检查启动admin_token的第三行。它应该是一个长随机字符串:
admin_token = 05131394ad6b49c56f217
这是你的keystone标记。使用python:
>>> from keystoneclient.v2_0.client as ksclient
>>> keystone = ksclient.Client(auth_url="http://service-stack.linxsol.com:35357/v2.0", username="admin", password="123456", tenant_name="admin")
当然,您可以将 auth_url, * 用户名,密码 *和 tenant_name 更改为您的选择。现在您可以使用 keystone 执行所有api任务:
keystone.tenants.list()
keystone.users.list()
keystone.roles.list()
或使用 dir(keystone)列出所有可用选项。
您可以按如下方式重复使用令牌:
auth_ref = keystone.auth_ref or token = ksclient.get_raw_token_from_identity_service(auth_url="http://service-stack.linxsol.com:35357/v2.0", username="admin", password="123456", tenant_name="admin")
但请记住,它会返回一个字典和一个不是以令牌形式存在的原始令牌,如上所示。
有关详细信息,请查看python-keystoneclient。
我希望有所帮助。
答案 3 :(得分:1)
作为如何实现目标的一个例子:
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
答案 4 :(得分:0)