API问题定位指导-常见问题定位指导:Token的权限范围问题

时间:2023-11-01 16:13:46

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,则会正确调用。

support.huaweicloud.com/trouble-apitr/apitr_003.html