我正在使用Azure AD OAuth2授权来保护我的Web API。现在我需要支持两个OAuth2场景(流程) -
访问Web API的Web应用程序以及基于用户角色的API将为资源提供服务。 这是使用授权oauth流程实现的,并且使用Authorize [Role =“Read”]属性完成访问控制
访问相同Web API的守护程序(控制台)应用程序。虽然我能够通过使用客户端凭证oauth流获取令牌,但我无法确定如何管理对守护进程的访问
一旦令牌出现问题,控制台就可以逐字访问任何API方法。
范围 - 当grant_type为“client_credentials”时,范围不是/ token端点的参数 角色 - 不能使用它,因为这与用户
相关联有人可以建议,我们如何在客户端凭据流中进行访问控制?我如何同时满足要求1和2
答案 0 :(得分:3)
您可以定义"角色"适用于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角色,并为守护程序控制台应用程序提供Read all things应用程序权限。你实现了两种情况:)
您可以转到企业应用程序 - >您的API->用户和群组 - >添加用户,将角色添加到用户/群组。选择您想要的用户/组,然后为他们选择一个角色(如果您只有一个角色将被预选)。
您可以通过查找其他应用程序的应用程序注册 - >所需权限 - >添加 - >添加应用程序权限 - 查找您的API->选择 - >检查您之前定义的应用程序权限名单。然后,您可以按“授予权限”按钮授予应用程序角色。
然后,您可以获取任一方案的角色声明中的值。
因此角色声明在第一个场景中将如下所示:
"roles": [
"Things.Read"
],
并在第二种情况中像这样:
"roles": [
"Things.Read.All"
],
答案 1 :(得分:0)
您可以通过客户端获得的令牌获得应用程序角色。但是在服务器端(受保护的API端),没有办法看到Roles声称要授权。
使用User / Roles,您可以在Manifest文件中定义的Users和角色之间创建映射。因此,UI和API将知道要授权的用户角色。
使用App / Roles,Azure门户无法创建映射clientId / clientSecret到Manifest中定义的AppRole。