我正在使用Microsoft Azure。我发布了几个Web API。每个都启用了身份验证/授权,Azure Active Directory(AAD)作为唯一提供商。我们有一个AAD租户。
消费者将成为合作伙伴公司'应用。对于每个消费者,我在AAD中创建了App Registration。使用该App Registration的应用程序ID和密钥我可以成功获取令牌并调用Web API(通过Postman测试)。
我的问题是每个消费者凭证都可以访问每个API。我想限制消费者对特定API的访问权限。例如,消费者A可以访问API P和Q;消费者B可以访问API Q和R.有一些重叠,有些独特。我一直在使用在线文档。他们很少提及这种服务到服务方案。我找不到匹配我的场景的示例代码。如何在AAD单租户中强制使用API映射?
答案 0 :(得分:0)
在service-to-servie场景中,最简单的方法是在web api端编写自己的验证逻辑。
在web api端获取访问令牌后,检查访问令牌中的客户端ID(appid
声明),如果该客户端不被允许访问web api,则拒绝它并返回错误响应。< / p>
另一种方法是检查应用程序角色:
,将应用程序角色设置为Manifest,如:
"appRoles": [
{
"allowedMemberTypes": [
"Application"
],
"displayName": "tester",
"id": "9f29f99b-5c77-4fba-a310-4a5c0572e8ff",
"isEnabled": true,
"description": "read client app",
"value": "tester"
}
在Azure Portal中注册的客户端应用程序中,在Required permissions
刀片中授予相关的应用程序权限。在添加应用程序权限后,请忽略管理员同意,点击Grant Permissions
按钮(使用管理员帐户登录)。
在您的web api代码中,在启动文件中配置角色声明类型后,使用IsInRole()或[Authorize]属性检查访问权限。
您可以参考this document解释并显示详细步骤。请参阅Configuring client application to request application roles of resource API
部分。