我尝试使用基于Keystone的身份验证(在Keystone API docs here之后)使用curl访问Swift。在
curl -d '{"auth": {"passwordCredentials": {
"username": "USERNAME", "password": "PASSWORD"}}}' \
-H "Content-Type: application/json" \
http://identity:35357/v2.0/tokens
回应:
^{pr2}$注意,与API docs中所说的相反,响应中缺少租户信息。在
curl -H "X-Auth-Token: TOKENID" http://swift/v1/AUTH_TENANTID/bucket
回复:401 Unauthorized
在查看Keystone auth_令牌中间件内部后,我发现它在尝试从令牌数据获取租户时失败:
def get_tenant_info():
"""Returns a (tenant_id, tenant_name) tuple from context."""
def essex():
"""Essex puts the tenant ID and name on the token."""
return (token['tenant']['id'], token['tenant']['name'])
def pre_diablo():
"""Pre-diablo, Keystone only provided tenantId."""
return (token['tenantId'], token['tenantId'])
def default_tenant():
"""Pre-grizzly, assume the user's default tenant."""
return (user['tenantId'], user['tenantName'])
for method in [essex, pre_diablo, default_tenant]:
try:
return method()
except KeyError:
pass
raise InvalidUserToken('Unable to determine tenancy.')
由于令牌数据中没有租户信息,它总是失败。 我可能做错了什么?在
这个答案解决了您最初的身份验证问题,但不是问题的其余部分。。。在
您最初的请求:
需要提供
tenantName
或tenantId
属性。如果提供了其中任何一个,那么您的回复应该同时包含租户信息和服务目录,以便查找其他服务端点。在所以:
^{pr2}$你应该得到这样的东西:
相关问题 更多 >
编程相关推荐