我们希望在API中实现授权。
例如。我们有API和API,它们都暴露在不同的消费者面前.
我们已经在IdentityServer4中设置了基于范围的授权,在这里我们用不同的策略来装饰端点。使用IdentityServer4,我们能够实现这一点,因为IdentityServer4令牌在所有授予类型中都有作用域声明,但是使用Azure,我们发现不能在用客户端凭据流生成的令牌中具有范围声明。

在我们的例子中,Web也暴露给了消费者,他们同样具有基于范围的授权。为了调用Web中的Web,我们使用客户端凭据流,它将没有范围声明作为标记,因此我们无法授权我们对Web的调用。
如何在微服务体系结构中使用Azure AD实现基于范围的授权,其中我们从一个上下文调用其他上下文API。
发布于 2022-05-20 10:46:39
you get roles客户端凭据流和使用应用程序权限时,不要使用范围,即令牌中的scp声明。

例:
{
"appRoles": [
{
"allowedMemberTypes": [
"Application"
],
"displayName": "Read all todo items",
"id": "f8dxxxxxxxxxxxxf98",
"isEnabled": true,
"description": "Allow the application to read all todo items as itself.",
"value": "Todo.Read.All"
}
]
}在那之后,这些人必须得到行政许可。
因此,现在当请求一个默认范围为api://<app id>/.default的令牌时,角色声明中将返回“作用域”。

因此,我们可以使用角色声明作为授权目的。
同时也是一项工作
请确保添加额外的作用域,如profile、offline_access open_id。给response_type=token而不是id_token
示例请求:
......&redirect_uri=https://jwt.io&scope=openid profile offline_access&response_type=token&prompt=login参考资料:
编辑:
https://tenant.b2clogin.com/tenant.onmicrosoft.com/oauth2/v2.0/authorize?p=B2C_1_TenantSignUpIn&client_id=<appid>&nonce=defaultNonce&redirect_uri=https://jwt.ms&scope=openid offline profile https://tenant.onmicrosoft.com/b2capi/write https://tenant.onmicrosoft.com/b2capi/read https://tenant.onmicrosoft.com/b2capi/user_impersonation&response_type=id_token&prompt=login。请注意,根据流类型,作用域作为角色存在。
https://stackoverflow.com/questions/72304890
复制相似问题