分享

Openstack通过API获取token查询服务

本帖最后由 Kevin517 于 2017-3-6 23:58 编辑

环境:Openstack-Mitaka
由于对 Web 不是太熟悉。对 API 使用有很多疑惑。

在通过 Keystone 获取 Token 查询其他服务的过程中,遇到了点问题,不太明白,希望大家能帮忙解答一下。

第一步通过 user,domain,password 获取 token

keystone-user-token.PNG

keystone-user-token1.PNG

[root@controller ~]# curl -i  -H "Content-Type: application/json" -d '
{
    "auth": {
        "identity": {
            "methods": [
                "password"
            ],
            "password": {
                "user": {
                    "name": "admin",
                    "domain": {
                        "name": "000000"
                    },
                    "password": "000000"
                }
            }
        }
    }
}' http://controller:35357/v3/auth/tokens
HTTP/1.1 201 Created
Date: Mon, 06 Mar 2017 15:50:18 GMT
Server: Apache/2.4.6 (CentOS) mod_wsgi/3.4 Python/2.7.5
X-Subject-Token: gAAAAABYvYU6e9eJIaFyuj0Efjhwcoh77mDwEc6Al_W9Q4b2JLoq7VlkCXiJQ_1WquANO0AWsuCGwBEqindBP8NZtgQ0fhNNV9YCn1MV8ImAXhe13KhwldxhCfjDyWxRc7jeCp9ioAiHJ5nrtQ3cmkPxoLKDS-nQ7g
Vary: X-Auth-Token
x-openstack-request-id: req-b924e411-038d-42cf-9ddf-0d7aed8808d6
Content-Length: 307
Content-Type: application/json

{
    "token": {
        "issued_at": "2017-03-06T15:50:18.000000Z",
        "audit_ids": [
            "2vdy519DTAq2M-TNBnCr2A"
        ],
        "methods": [
            "password"
        ],
        "expires_at": "2017-03-06T16:50:18.497415Z",
        "user": {
            "domain": {
                "id": "04c83178cfb640f486a970eaed17cb7e",
                "name": "000000"
            },
            "id": "60f8d2d0cf94455d91b9c33d1372b6d3",
            "name": "admin"
        }
    }
}


可以正常请求到 X-Subject-Token 和 audit_ids。

但后面我通过获取的数据使用 get 请求都会返回 401 。

keystone-project-get1.PNG

想问一下是我的请求不对吗,还是什么愿意。

希望能给点指导,或者说一下具体操作。谢谢

已有(6)人评论

跳转到指定楼层
nextuser 发表于 2017-3-7 08:43:20
请求下镜像试试

images

楼主参考的网址是哪个?


回复

使用道具 举报

Kevin517 发表于 2017-3-7 11:05:37
nextuser 发表于 2017-3-7 08:43
请求下镜像试试

images

openstack 官网的 API 页面

https://developer.openstack.org/ ... =check-token-detail,token-authentication-with-unscoped-authorization-detail,password-authentication-with-unscoped-authorization-detail,password-authentication-with-scoped-authorization-detail
回复

使用道具 举报

nextuser 发表于 2017-3-7 13:13:57
Kevin517 发表于 2017-3-7 11:05
openstack 官网的 API 页面

https://developer.openstack.org/api-ref/identity/v3/?expanded=check-t ...

用这个请求试试
[mw_shl_code=bash,true]http://192.168.10.11:5000/v3/auth/projects
[/mw_shl_code]


回复

使用道具 举报

nextuser 发表于 2017-3-7 13:22:55
Response Codes¶Success¶
Code
Reason
201 - CreatedResource was created and is ready to use.

Error¶[td]
Code
Reason
400 - Bad RequestSome content in the request was invalid.
401 - UnauthorizedUser must authenticate before making a request.
403 - ForbiddenPolicy does not allow current user to do this operation.
409 - ConflictThis operation conflicted with another operation on this resource.

401说明是未验证身份,也就是可能token出问题了
回复

使用道具 举报

Kevin517 发表于 2017-3-7 16:04:59
本帖最后由 Kevin517 于 2017-3-7 16:09 编辑
nextuser 发表于 2017-3-7 13:13
用这个请求试试

...

您好,我刚刚试了一次,还是 401 。


我通过  user password  domain 获取了 Auth-Token 、X-Subject-Token 有一个 post 请求可以。但是 get 请求就是不行。

您看一下

keystone_token01.PNG


在 Head 中 有
X-Subject-Token →gAAAAABYvmOX-vf67cmp8Hk3eFRn3Jqci6iJeeqAxjyP5K1tydIeQ99jKtoVHtGpPiwEfIsbsYUAxIAHZwTaMVNI8SWDrloukf4UM0xD-kncP78QUJklXQq5JhjKRubZLprXnCd3E-3yAWcq3Ti4PwalMpUN3A4hug


在 body 中 有 audit_ids


[mw_shl_code=python,true]{
    "token": {
        "issued_at": "2017-03-07T07:39:03.000000Z",
        "audit_ids": [
            "AAPiX_YQSIW2txbtwFRGrg"
        ],
        "methods": [
            "password"
        ],
        "expires_at": "2017-03-07T08:39:03.505610Z",
        "user": {
            "domain": {
                "id": "3a3eee072b0d4a15ba03df08a5f540d3",
                "name": "000000"
            },
            "id": "6ffe6bd54997446facc93e22e65928f7",
            "name": "admin"
        }
    }
}[/mw_shl_code]


当我使用 这两个 token 去做下面的 post 是可以的 。

POST


/v3/auth/tokens
Token authentication with unscoped authorization




close



Authenticates an identity and generates a token. Uses the token authentication method. Authorization is unscoped.
In the request body, provide the token ID.
Normal response codes: 201
Error response codes: 413,415,405,404,403,401,400,503,409
Request¶[td]
Name
In
Type
Description
nocatalog (Optional)querystring(Since v3.1) The authentication response excludes the service catalog. By default, the response includes the service catalog.
identitybodyobjectAn identity object.
tokenbodyobjectA token object. The token authentication method is used. This method is typically used in combination with a request to change authorization scope.
idbodystringA token ID.
authbodyobjectAn auth object.
methodsbodyarrayThe authentication method. For token authentication, specify token.

Request Example¶

[mw_shl_code=python,true]{
    "auth": {
        "identity": {
            "methods": [
                "token"
            ],
            "token": {
                "id": "'$OS_TOKEN'"
            }
        }
    }
}[/mw_shl_code]
Response Parameters¶[td]
Name
In
Type
Description
X-Subject-TokenheaderstringThe authentication token. An authentication response returns the token ID in this header rather than in the response body.
X-Auth-TokenheaderstringA valid authentication token for an administrative user.




post 使用了 上次 X-Subject-Token

keystone_token02.PNG


这里会的到两个 audit_ids


[mw_shl_code=python,true]{
  "token": {
    "issued_at": "2017-03-07T07:50:30.000000Z",
    "audit_ids": [
      "j1rlM1EnRG2q_DjdGAx0DQ",
      "AAPiX_YQSIW2txbtwFRGrg"
    ],
    "methods": [
      "token",
      "password"
    ],
    "expires_at": "2017-03-07T08:39:03.505610Z",
    "user": {
      "domain": {
        "id": "3a3eee072b0d4a15ba03df08a5f540d3",
        "name": "000000"
      },
      "id": "6ffe6bd54997446facc93e22e65928f7",
      "name": "admin"
    }
  }
}[/mw_shl_code]

根据文档对 audit_ids 的说明,两个 token 其中一个是上次的,另一个是作为下次使用的。但是我进行 get 查询 /v3/auth/catalog 同样返回 401 。


keystone_token03.PNG






回复

使用道具 举报

einhep 发表于 2017-3-7 17:53:21
Kevin517 发表于 2017-3-7 16:04
您好,我刚刚试了一次,还是 401 。

通过shell看下,是否确实都有。然后通过rest api请求
回复

使用道具 举报

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

本版积分规则

关闭

推荐上一条 /2 下一条