API问题定位指导-常见问题定位指导:Token的权限范围问题
Token的权限范围问题
在使用Token认证时,需要先申请Token,申请Token时需要填写Token是全局级别的还是项目级别的,如下申请Token接口的请求Body体中scope所示。
{ "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "name": "username", "password": "********", "domain": { "name": "domainname" } } } }, "scope": { "project": { "name": "xxxxxxxx" } } }}
- 区域级服务需要获取项目级别的Token(区域默认对应一个项目,这个项目由系统预置),此时请求body中auth.scope的取值为project。
- 全局级服务需要获取全局级别的Token,此时请求body中auth.scope的取值为domain。
对于区域级服务,如果获取全局级别的Token,虽能使用该Token通过认证,但无法在后端通过鉴权,会导致请求失败。
例如获取一个全局Token,如下所示。
{ "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "domain": { "name": "domainname" }, "name": "username", "password": "********" } } }, "scope": { "domain": { "id": "0503dda878000fed0f75c0096d70a960" } } }}
然后调用E CS 服务的查询ECS服务器列表的API,则会得到如下响应。表示Token与URL中项目不匹配,返回错误。
{ "error": { "message": "tenantId in token is not the same with in URL.", "code": "Common.0018" }}
此种情况下,如果调用全局级服务的API,如TMS的API,则会正确调用。