Azure AD OAuth客户端凭据流访问控制
我正在使用Azure AD OAuth2授权来保护我的Web API。现在我需要支持两个OAuth2用户的情况(流) -Azure AD OAuth客户端凭据流访问控制
Web应用程序访问Web API,并根据用户的角色将成为一个资源的API。 这是使用授权oauth流实现的,访问控制是使用授权[Role =“Read”]属性完成的
访问相同Web API的守护进程(控制台)应用程序。虽然我能够通过使用客户端证书的OAuth流得到一个道理,但我无法弄清楚如何一旦令牌是控制台可以从字面上访问任何的问题,管理访问守护进程
API方法。
范围 - 当grant_type是“client_credentials”范围不是参数/令牌端点 角色 - 不能使用它,因为这是与用户相关联
有人可以请建议,我们如何能在客户端进行访问控制凭证流?以及如何同时满足要求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"
}
]
}
所以我们定义一个角色,只允许应用程序作为其成员。这是一个应用程序许可。另一个是可以提供给用户和组的角色。
然后您可以为用户提供Read things角色,并且守护进程控制台应用程序读取所有事物应用程序权限。并且你实现了两种场景:)
通过转到企业应用程序 - >您的API->用户和组 - >添加用户,您可以将角色添加到用户/组。选择你想要的用户/组,然后为他们选择一个角色(如果你只有一个,它将被预选)。
您通过寻找其他应用程序的App注册 - >必需permissions->添加 - >找到你的API - >选择 - >检查您先前从列表中定义的应用程序的权限添加应用程序的权限。然后,您可以按授予权限按钮来授予应用程序角色。
你再在角色的价值索赔这两种情况下。
所以角色要求看起来像这样在第一种方案:
"roles": [
"Things.Read"
],
像这样在第二个场景:
"roles": [
"Things.Read.All"
],
这将在方案1中工作,但如何做这工作客户端凭据流?假设我有一个客户端应用程序应该具有“读取”访问权限,另一个客户端需要“写入”访问权限,我在哪里指定映射?我们可以在Azure门户中定义此访问吗?或者客户端是否可以请求令牌请求中的读/写权限? – Anoop
将应用程序权限添加到Azure AD中的控制台应用程序并授予该权限后,使用客户端凭据获取的令牌应该包括角色。 – juunas
只是为了确保这个工作,我记得我测试过这个。在这两个标记中,您将获得一个角色数组,其中包含角色中定义的值。所以在这种情况下要么Things.Read要么是Things.Read.All。 :) – juunas