Azure AD:限制用户对特定Web API的访问

时间:2017-09-25 05:24:12

标签: api azure oauth-2.0 azure-active-directory

我正在使用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​​映射?

1 个答案:

答案 0 :(得分:0)

在service-to-servie场景中,最简单的方法是在web api端编写自己的验证逻辑。

在web api端获取访问令牌后,检查访问令牌中的客户端ID(appid声明),如果该客户端不被允许访问web api,则拒绝它并返回错误响应。< / p>

另一种方法是检查应用程序角色:

    在您的web api应用程序中
  1. ,将应用程序角色设置为Manifest,如:

    "appRoles": [
    {
      "allowedMemberTypes": [
        "Application"
      ],
      "displayName": "tester",
      "id": "9f29f99b-5c77-4fba-a310-4a5c0572e8ff",
      "isEnabled": true,
      "description": "read client app",
      "value": "tester"
    }  
    

  2. 在Azure Portal中注册的客户端应用程序中,在Required permissions刀片中授予相关的应用程序权限。在添加应用程序权限后,请忽略管理员同意,点击Grant Permissions按钮(使用管理员帐户登录)。

  3. 在您的web api代码中,在启动文件中配置角色声明类型后,使用IsInRole()或[Authorize]属性检查访问权限。

  4. 您可以参考this document解释并显示详细步骤。请参阅Configuring client application to request application roles of resource API部分。