Ano*_*oop 4 oauth-2.0 asp.net-web-api azure-active-directory azure-ad-graph-api
我正在使用 Azure AD OAuth2 授权来保护我的 Web API。现在我需要支持两个 OAuth2 场景(流程)-
Web 应用程序访问 Web API,基于用户角色的 API 将为资源提供服务。这是使用授权 oauth 流程实现的,并且使用 Authorize[Role="Read"] 属性完成访问控制
访问相同 Web API 的守护程序(控制台)应用程序。虽然我能够通过使用客户端凭据 oauth 流获取令牌,但我无法弄清楚如何管理对守护进程的访问
一旦令牌发出,控制台就可以访问任何 API 方法。
范围 - 当 grant_type 为“client_credentials”时,范围不是 /token 端点角色的参数 - 不能使用它,因为它与用户相关联
有人可以建议,我们如何在客户端凭据流中进行访问控制?以及我如何同时满足要求 1 和 2
可以在 Azure AD 的 API 清单中为用户和应用程序定义“角色”。
如果您想知道,应用程序角色实际上是应用程序权限。
所以你可以在你的 API 清单中有这样的东西(为了清楚起见,删除了其他属性):
{
"appRoles": [
{
"allowedMemberTypes": [
"Application"
],
"displayName": "Read all things",
"id": "32028ccd-3212-4f39-3212-beabd6787d81",
"isEnabled": true,
"description": "Allow the application to read all things as itself.",
"value": "Things.Read.All"
},
{
"allowedMemberTypes": [
"User"
],
"displayName": "Read things",
"id": "ef8d02ff-eee1-6745-9387-96587c358783",
"isEnabled": true,
"description": "Allow the user to read things.",
"value": "Things.Read"
}
]
}
Run Code Online (Sandbox Code Playgroud)
所以我们定义了一个角色,它只允许应用程序作为其成员。这是一个应用程序权限。另一个是可以赋予用户和组的角色。
然后,您可以向用户授予 Read things 角色,并为守护程序控制台应用程序授予 Read all things 应用程序权限。你实现了这两种情况:)
您可以通过转至企业应用程序-> 您的 API-> 用户和组-> 添加用户来将角色添加到用户/组。选择您想要的用户/组,然后为他们选择一个角色(如果您只有一个角色,它将被预先选择)。
您通过找到其他应用程序的应用程序注册->所需权限->添加->查找您的API->选择->从列表中检查您之前定义的应用程序权限来添加应用程序权限。然后您可以按授予权限按钮授予应用程序角色。
然后,您将获得任一场景的角色声明中的值。
因此,在第一个场景中,角色声明将如下所示:
"roles": [
"Things.Read"
],
Run Code Online (Sandbox Code Playgroud)
在第二个场景中是这样的:
"roles": [
"Things.Read.All"
],
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1245 次 |
| 最近记录: |