2017-09-25 71 views
0

我正在使用Microsoft Azure。我已经发布了几个Web API。每个都启用了身份验证/授权,Azure Active Directory(AAD)作为唯一的提供者。我们有一个AAD租户。Azure AD:限制消费者对特定Web API的访问

消费者将成为合作伙伴公司的应用程序。对于每位消费者,我都在AAD中创建了应用程序注册。使用该应用程序注册的应用程序ID和密钥我可以成功获取令牌并调用Web API(通过Postman进行测试)。

我的问题是每个消费者凭证都可以访问每个API。我想限制消费者只能访问特定的API。例如,消费者A可以访问API P和Q;消费者B可以访问API Q和R.这里有一些重叠和一些唯一性。我一直在通过在线文档。他们对这种服务对服务的情况很少提及。我找不到与我的场景匹配的示例代码。如何在AAD单租户中强制消费者进行API映射?

回答

0

在服务到服务的情况下,最简单的方法是在web api端编写自己的验证逻辑。

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

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

  1. 在您的Web API应用程序

    ,在清单设置应用程序的角色,如:

    "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]属性检查访问权限。

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