azure oauth内标识不包含有关角色或范围的信息

kknvjkwl  于 2022-12-30  发布在  其他
关注(0)|答案(1)|浏览(99)

我已在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"
}
bbmckpt7

bbmckpt71#

我尝试通过Postman在我的环境中重现相同的问题,结果如下:

我注册了一个Azure AD应用程序,并创建了名为READER.ALL应用程序角色,如下所示:

现在我展示了一个名为ReaderScope.ALL的API,如下所示:

现在,我使用客户端凭据流程通过Postman生成了令牌,参数如下:

POST https://login.microsoftonline.com/<tenantID>/oauth2/v2.0/token

client_id: <appID>
client_secret: <secret>
scope: api://<appID>/.default
grant_type:client_credentials

答复:

当我解码令牌时,我没有发现**roles**声明与您的声明相同,如下所示:

要在令牌中获取**roles声明,您需要添加API权限**,如下所示:

现在,选择应用程序权限并添加应用程序角色,如下所示:

请确保向添加的权限授予管理员许可,如下所示:

当我现在再次生成令牌并对其进行解码时,我成功获得了**roles**声明,如下所示:

使用客户端凭据流时,您将仅获得**roles声明中的应用程序权限。
要获得
scp索赔中的Delegated**权限,需要使用授权代码流等交互流。

相关问题