获取用户Token
功能介绍
该接口通过用户名/密码的方式进行认证,用来获取用户Token,Token是系统颁发给用户的访问令牌,承载用户的身份、权限等信息。调用IAM以及其他云服务的接口时,可以使用本接口获取的token进行鉴权。
- 账号或IAM用户修改密码、访问密钥,该账号或IAM用户Token将立即失效。
- 删除/停用IAM用户,该IAM用户Token将立即失效。
- IAM用户权限发生变化,该IAM用户Token将立即失效。如IAM用户加入或移出用户组、用户所在用户组权限变更等。
URI
POST /v3/auth/tokens
请求
- Request Header参数说明
参数
是否必选
类型
说明
Content-Type
是
String
该字段内容填为“application/json;charset=utf8”。
- Request Body参数说明
参数
是否必选
类型
说明
identity
是
Json Object
认证参数,包含:methods,password。
"identity": { "methods": ["password"], "password": {
methods
是
String Array
认证方法,该字段内容为“password”。如果用户开启了虚拟MFA设备的登录保护功能时,该字段内容为[“password”,"totp"]。
password
是
Json Object
认证信息,示例:
"password": { "user": { "name": "user A", "password": "**********", "domain": { "name": "domain A"
- user.name:用户名称,根据获取token的主体填写,可以在我的凭证中获取。
- password:用户的登录密码。
- domain.name:用户所属的账号名称,可以在我的凭证中获取。
totp
否
Json Object
认证信息,仅在您开启了虚拟MFA方式的登录保护功能时,该参数需要填写。
示例:
"totp": { "user": { "id": "b95b78b67fa045b38104c12fb...", "passcode": "******"
- user.id:用户ID,可以在我的凭证中获取。
- passcode:虚拟MFA验证码,在MFA应用程序中获取动态验证码。
scope
否
Json Object
token的使用范围,取值为project或domain,二选一即可。
- 示例1:取值为project时,表示获取的Token可以作用于项目级服务,仅能访问指定project下的资源,如ECS服务。project支持id和name,二选一即可。
"scope": { "project": { "id": "0b95b78b67fa045b38104c12fb..." } }
- 示例2:取值为domain时,表示获取的Token可以作用于全局服务,全局服务不区分项目或区域,如OBS服务。domain支持id和name,二选一即可。
"scope": { "domain": { "name": " domain A" } }
- 请求样例
获取用户名为“user A”,登录密码为“**********”,所属账号名为“domain A”,作用范围为“domain”的token。
{ "auth": { "identity": { "methods": ["password"], "password": { "user": { "name": "user A", "password": "**********", "domain": { "name": "domain A" } } } }, "scope": { "domain": { "name": "domain A" } } } }
开启虚拟MFA方式登录保护时获取token的请求样例。
{ "auth": { "identity": { "methods": ["password", "totp"], "password": { "user": { "name": "user A", "password": "********", "domain": { "name": "domain A" } } }, "totp" : { "user": { "id": "dfsafdfsaf....", "passcode": "******" } } }, "scope": { "domain": { "name": "domain A" } } } }
响应
- Response Header参数说明
参数
是否必选
类型
描述
X-Subject-Token
是
String
获取到的token。
- Token格式说明
参数
是否必选
类型
描述
methods
是
Json Array
获取token的方式。
expires_at
是
String
token到期时间。
issued_at
是
String
token产生时间。
mfa_authn_at
否
String
MFA认证的时间。用户开启了虚拟MFA设备的登录保护功能时,显示此字段。
user
是
Json Object
示例:
"user": { "name": "user A", "id": "b95b78b67fa045b38104...", "password_expires_at":"2016-11-06T15:32:17.000000", "domain": { "name": "domain A", "id": "fdec73ffea524aa1b373e40..." } }
- user.name:用户名称。
- user.id:用户ID。
- domain.name:用户的所属账号的名称。
- domain.id:用户的所属账户的ID。
- password_expires_at:密码过期时间(UTC时间),“null”表示密码不过期。
domain
否
Json Object
如果请求体中scope参数设置为domain,则返回该字段。
示例:
"domain": { "name" : "domain A" "id" : "fdec73ffea524aa1b373e40..."
- domain.name:用户的所属的账户名称。
- domain.id:用户的所属账户的ID。
project
否
Json Object
如果请求体中scope参数设置为project,则返回该字段。
示例:
"project": { "name": "project A", "id": "34c77f3eaf84c00aaf54...", "domain": { "name": "domain A", "id": "fdec73ffea524aa1b373e40..." } }
- project.name:project名称。
- project.id:project的ID。
- domain.name:project的账户名称。
- domain.id:project的账户的ID。
catalog
是
Json Array
endpoints相关信息。
示例:
"catalog": [{ "type": "identity", "id": "1331e5cff2a74d76b03da1225910e...", "name": "iam", "endpoints": [{ "url": "https://sample.domain.com/v3", "region": "*", "region_id": "*", "interface": "public", "id": "089d4a381d574308a703122d3ae73..." }] }]
- type:该接口所属的服务。
- id:服务的id。
- name:服务的名称。
- endpoints:终端节点。
- url:调用该接口的url。
- region:服务的所属区域。
- region_id:服务的所属区域id。
- interface:接口状态,public表示为公开。
- id:接口的id。
roles
是
Json Object
Token的权限信息。
示例:
"roles" : [{ "name" : "role1", "id" : "roleid1" }, { "name" : "role2", "id" : "roleid2" } ]
- 响应样例
获取用户名为“user A”,登录密码为“**********”,所属账号名为“domain A”,作用范围为“domain”的token。
Response Header中存储信息为: X-Subject-Token:MIIDkgYJKoZIhvcNAQcCoIIDgzCCA38CAQExDTALBglghkgBZQMEAgEwgXXXXX... Response Body中存储信息为: { "token" : { "methods" : ["password"], "expires_at" : "2015-11-09T01:42:57.527363Z", "issued_at" : "2015-11-09T00:42:57.527404Z", "user" : { "domain" : { "id" : "ded485def148s4e7d2se41d5se...", "name" : "domain A" }, "id" : "ee4dfb6e5540447cb37419051...", "name" : "user A", "password_expires_at":"2016-11-06T15:32:17.000000", }, "domain" : { "name" : "domain A", "id" : "dod4ed5e8d4e8d2e8e8d5d2d..." }, "catalog": [{ "type": "identity", "id": "1331e5cff2a74d76b03da12259...", "name": "iam", "endpoints": [{ "url": "https://sample.domain.com/v3", "region": "*", "region_id": "*", "interface": "public", "id": "089d4a381d574308a703122d3a..." }] }], "roles" : [{ "name" : "role1", "id" : "roleid1" }, { "name" : "role2", "id" : "roleid2" } ] } }
开启虚拟MFA方式登录保护时获取token的请求样例。
Response Header中存储信息为: X-Subject-Token:MIIDkgYJKoZIhvcNAQcCoIIDgzCCA38CAQExDTALBglghkgBZQMEAgEwgXXXXX... Response Body中存储信息为: { "token": { "expires_at": "2020-09-05T06:50:44.390000Z", "mfa_authn_at": "2020-09-04T06:50:44.390000Z", "issued_at": "2020-09-04T06:50:44.390000Z", "methods": [ "password", "totp" ], "catalog": [ { "endpoints": [ { "id": "33e1cbdd86d34e89a63cf8ad16a5f...", "interface": "public", "region": "*", "region_id": "*", "url": "https://sample.domain.com/v3.0" } ], "id": "100a6a3477f1495286579b819d399...", "name": "iam", "type": "iam" }, ], "domain": { "id": "e6505630658e49649784759cdf251...", "name": "domain A" }, "roles": [ { "name" : "role1", "id" : "roleid1" },{ "name" : "role1", "id" : "roleid1" } ], "user": { "domain": { "id": "e6505630658e49649784759cdf251...", "name": "domain A" }, "id": "092ac6365a0025b11f76c01e90100...", "name": "user A", "password_expires_at": "" } } }
状态码
状态码 |
说明 |
---|---|
201 |
请求成功。 |
400 |
请求错误。 |
401 |
认证失败。 |
403 |
鉴权失败。 |
404 |
找不到资源。 |
500 |
内部服务错误。可能是格式错误。 |
503 |
服务不可用。 |