分享

获取Keystone token的三种方式

xioaxu790 发表于 2014-9-22 19:04:56 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 0 13236
问题导读
1、从Keystone获得token的方式有哪些?
2、为什么使用 Python Keystone Client 方式最好?





让我们粗略看一下,三种从Keystone获得token的方式。在尝试这三种方式之前,你得确保已经装好Keystone终端。如果还没有装好,可以看grizzly安装版本的Keystone 安装部分。


Note:这些呼叫都将请求的是Keystone v2版本。

假定你已经安装好,并且Keystone已经跑起来了:)。然后接下来我们首先要做的便是,发一个简单的cURL发送请求:
  1. $
  2. curl -d '{"auth": {"tenantName": "demo", "passwordCredentials": {"username": "demo", "password": "password"}}}' -H "Content-type: application/json" http://localhost:5000/v2.0/tokens
复制代码



其中的tenantName 是作用域名。假使你省略了这个名字,将会获得一个无作用域的token.

当请求发送完毕,主机会返回一个JSON字符串类似如下(你的可能不一样):
  1. {
  2.     "access":
  3. {
  4.         "token":
  5. {
  6.             "issued_at":
  7. "2014-02-10T00:40:20.909222",
  8.             "expires":
  9. "2014-02-11T00:40:20Z",
  10.             "id":
  11. "MIIDjwYJKoZIhvcNAQcCoIIDgDC",
  12.             "tenant":
  13. {
  14.                 "description":
  15. null,
  16.                 "enabled":
  17. true,
  18.                 "id":
  19. "8cdca733159c4bf6a622b9bb25a73ad6",
  20.                 "name":
  21. "demo"
  22.             }
  23.         },
  24.         "serviceCatalog":
  25. [],
  26.         "user":
  27. {
  28.             "username":
  29. "demo",
  30.             "roles_links":
  31. [],
  32.             "id":
  33. "d5cf3796f7c04a468b5282555110ba5d",
  34.             "roles":
  35. [
  36.                 {
  37.                     "name":
  38. "member"
  39.                 }
  40.             ],
  41.             "name":
  42. "demo"
  43.         },
  44.         "metadata":
  45. {
  46.             "is_admin":
  47. 0,
  48.             "roles":
  49. [
  50.                 "a790ff829b0e4bc29d5ca4bbc58d48f1"
  51.             ]
  52.         }
  53.     }
  54. }
复制代码



现在假定你不想继续用python-keystoneclient,而是调用库函数urllib2的Python项目中获得作用域token,然后你可以这样做:
  1. from__future__
  2. importprint_function
  3. importurllib2
  4. importjson
  5. if__name__
  6. =="__main__":
  7.     json_payload={
  8.         "auth":
  9. {
  10.             "tenantName":"demo",
  11.             "passwordCredentials":
  12. {
  13.                 "username":"demo",
  14.                 "password":"password"
  15.             }
  16.         }
  17.     }
  18.     headers={'content-type':'application/json','accept':'application/json'}
  19.     request=urllib2.Request(url='http://localhost:5000/v2.0/tokens',
  20.                               data=json.dumps(json_payload),
  21.                               headers=headers)
  22.     keystone_response=urllib2.urlopen(request)
  23.     returned_data=json.loads(keystone_response.read())
  24.     ifkeystone_response.getcode()
  25. ==200:
  26.         print(returned_data)
  27.     else:
  28.         print('Something
  29. went wrong!')
复制代码



最后一种方式是调用Requests 库,例子如下:
  1. from__future__
  2. importprint_function
  3. importrequests
  4. importjson
  5. if__name__
  6. =="__main__":
  7.     json_payload={
  8.         "auth":
  9. {
  10.             "tenantName":"demo",
  11.             "passwordCredentials":
  12. {
  13.                 "username":"demo",
  14.                 "password":"password"
  15.             }
  16.         }
  17.     }
  18.     headers={'content-type':'application/json','accept':'application/json'}
  19.     response=requests.post(url='http://localhost:5000/v2.0/tokens',
  20.                              data=json.dumps(json_payload),
  21.                              headers=headers)
  22.     ifresponse.status_code
  23. ==requests.codes.ok:
  24.         print(response.json())
  25.     else:
  26.         print('Something
  27. went wrong!')
复制代码



和urllib2的那种方式似乎区别不大,就是少了几句代码,不过似乎更加清晰了。

当然最好还是用Python Keystone Client这种方式,比较容易上手,而且简单明了。

没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条