(六)、获取Keystone token的三种方式

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

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

假定你已经安装好,并且Keystone已经跑起来了:)。然后接下来我们首先要做的便是,发一个简单的cURL发送请求:

$ curl -d '{"auth": {"tenantName": "demo", "passwordCredentials": {"username": "demo", "password": "password"}}}' -H "Content-type: application/json" http://localhost:5000/v2.0/tokens

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

当请求发送完毕,主机会返回一个JSON字符串类似如下(你的可能不一样):

{
     "access": {
         "token": {
             "issued_at": "2014-02-10T00:40:20.909222",
             "expires": "2014-02-11T00:40:20Z",
             "id": "MIIDjwYJKoZIhvcNAQcCoIIDgDC",
             "tenant": {
                 "description": null,
                 "enabled": true,
                 "id": "8cdca733159c4bf6a622b9bb25a73ad6",
                 "name": "demo"
             }
         },
         "serviceCatalog": [],
         "user": {
             "username": "demo",
             "roles_links": [],
             "id": "d5cf3796f7c04a468b5282555110ba5d",
             "roles": [
                 {
                     "name": "member"
                 }
             ],
             "name": "demo"
         },
         "metadata": {
             "is_admin": 0,
             "roles": [
                 "a790ff829b0e4bc29d5ca4bbc58d48f1"
             ]
         }
     }
}

现在假定你不想继续用python-keystoneclient,而是调用库函数urllib2的Python项目中获得作用域token,然后你可以这样做:

from __future__ import print_function
 
import urllib2
import json
 
 
if __name__ = = "__main__" :
     json_payload = {
         "auth" : {
             "tenantName" : "demo" ,
             "passwordCredentials" : {
                 "username" : "demo" ,
                 "password" : "password"
             }
         }
     }
 
     headers = { 'content-type' : 'application/json' , 'accept' : 'application/json' }
 
     request = urllib2.Request(url = 'http://localhost:5000/v2.0/tokens' ,
                               data = json.dumps(json_payload),
                               headers = headers)
 
     keystone_response = urllib2.urlopen(request)
 
     returned_data = json.loads(keystone_response.read())
 
     if keystone_response.getcode() = = 200 :
         print (returned_data)
     else :
         print ( 'Something went wrong!' )

 最后一种方式是调用Requests 库,例子如下:

from __future__ import print_function
 
import requests
import json
 
 
if __name__ = = "__main__" :
     json_payload = {
         "auth" : {
             "tenantName" : "demo" ,
             "passwordCredentials" : {
                 "username" : "demo" ,
                 "password" : "password"
             }
         }
     }
 
     headers = { 'content-type' : 'application/json' , 'accept' : 'application/json' }
 
     response = requests.post(url = 'http://localhost:5000/v2.0/tokens' ,
                              data = json.dumps(json_payload),
                              headers = headers)
 
     if response.status_code = = requests.codes.ok:
         print (response.json())
     else :
         print ( 'Something went wrong!' )

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

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值