Nir*_*jan 5 authorization azure swagger azure-active-directory
您好,我正在开发 Azure AD。我有一个 webapi 项目和与之一起配置的 swagger。我已经抵制了天蓝色广告中的两个应用程序。一种用于 swagger,一种用于 webapi 应用程序。现在我想实现基于组的授权。所以现在我想从 microsoft graph api 调用组。从这里开始我就很困惑了。要访问组,我需要授予在我的 azure Ad swagger 应用程序或 webapi 应用程序中读取图形的权限?
下面是我的代码。
c.AddSecurityDefinition("oauth2", new OAuth2Scheme
{
Type = "oauth2",
Flow = "implicit",
AuthorizationUrl = swaggerUIOptions.AuthorizationUrl,
TokenUrl = swaggerUIOptions.TokenUrl,
Scopes = new Dictionary<string, string>
{
{ "read_user_groups", "https://graph.microsoft.com/Group.Read.All" }
}
});
Run Code Online (Sandbox Code Playgroud)
现在,在天蓝色的广告中,我拥有 API 权限和公开 API。
在我的应用程序注册内的 swagger 应用程序中,我具有 API 权限,并且添加了 Microsoft Graph 并选择了 Groups.Read All。然后我有 Expose API,我们可以添加范围。这两件事让我很困惑。我的 swagger 应用程序必须在我的 Web api 上进行基于组的授权吗?有人可以帮我吗?
好的。我想我已经明白你的想法了。
您希望根据用户所属的组向用户授予访问权限(对您的 Web API)。那是对的吗?
因此,您需要调用 Microsoft graph 来查看用户属于哪个组。
在这种情况下,您应该从 Web api 应用程序调用 Microsoft graph。(不是招摇的应用程序)
但是,没有必要搞得这么复杂。
正如我在评论中提到的,您可以直接从 jwt 令牌获取用户所属的组。
您可以按照此处的说明将群组声明包含在您的令牌中。您只需修改 Web api 应用程序的应用程序清单中的“groupMembershipClaims”字段:
"groupMembershipClaims": "SecurityGroup"
Run Code Online (Sandbox Code Playgroud)
然后令牌将包含该用户所属组的 ID,如下所示:
{
"groups": ["1ce9c55a-9826-4e32-871c-a8488144bb32"]
}
Run Code Online (Sandbox Code Playgroud)
然后您可以根据用户的组 ID 实现授权逻辑。
更新:
您可以将 appRole 添加到 Azure AD 应用程序(您的 Web api 应用程序)中,并将用户和组分配给 Role。
然后该组中的用户将有如下声明:
{
"roles": ["{the role you customized}"]
}
Run Code Online (Sandbox Code Playgroud)
之后,该角色将包含在访问令牌中。您可以根据用户的角色实现授权逻辑。
| 归档时间: |
|
| 查看次数: |
6536 次 |
| 最近记录: |