我已在AD中创建了应用程序注册,创建了客户端密码并公开了API。我已创建了应用程序角色并添加了权限(对默认图形用户读取的附加权限)。我还添加了作用域。
当我提出请求时
curl --location --request POST 'https://login.microsoftonline.com/<tenant id>/oauth2/v2.0/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'client_id=<application id>' \
--data-urlencode 'client_secret=<secret>' \
--data-urlencode 'scope=api://<application id>/.default' \
--data-urlencode 'grant_type=client_credentials'
我得到了包含 * access_token * 的响应。但是,当我解码令牌时,它不包含任何角色、作用域或任何内容
{
"aud": "api://<application id>",
"iss": "https://sts.windows.net/<tenant id>/",
"iat": 1672241639,
"nbf": 1672241639,
"exp": 1672245539,
"aio": "<>",
"appid": "<application id>",
"appidacr": "1",
"idp": "https://sts.windows.net/<tenant id>/",
"oid": "<>",
"rh": "<>.",
"sub": "<>",
"tid": "<tenant id>",
"uti": "<>",
"ver": "1.0"
}
缺少了什么?/oauth2/token
返回类似的响应
{
"aud": "<resource id>",
"iss": "https://sts.windows.net/<tenant id>/",
"iat": 1672241960,
"nbf": 1672241960,
"exp": 1672245860,
"aio": "<>",
"appid": "<application id>",
"appidacr": "1",
"idp": "https://sts.windows.net/<tenant id>/",
"oid": "<>",
"rh": "<>",
"sub": "<>",
"tenant_region_scope": "EU",
"tid": "<tenant id>",
"uti": "<>",
"ver": "1.0",
"xms_tdbr": "EU"
}
1条答案
按热度按时间bbmckpt71#
我尝试通过Postman在我的环境中重现相同的问题,结果如下:
我注册了一个Azure AD应用程序,并创建了名为
READER.ALL
的应用程序角色,如下所示:现在我展示了一个名为
ReaderScope.ALL
的API,如下所示:现在,我使用客户端凭据流程通过Postman生成了令牌,参数如下:
答复:
当我解码令牌时,我没有发现**
roles
**声明与您的声明相同,如下所示:要在令牌中获取**
roles
声明,您需要添加API权限**,如下所示:现在,选择应用程序权限并添加应用程序角色,如下所示:
请确保向添加的权限授予管理员许可,如下所示:
当我现在再次生成令牌并对其进行解码时,我成功获得了**
roles
**声明,如下所示:使用客户端凭据流时,您将仅获得**
roles
声明中的应用程序权限。要获得
scp
索赔中的Delegated**权限,需要使用授权代码流等交互流。