如何使用Azure AD生成具有角色定义的令牌

时间:2017-03-07 19:28:33

标签: c# .net azure active-directory

我有这样的情况:我有一个App Service,我将其授权设置为允许匿名请求,将身份验证提供程序设置为Active Directory设置Azure AD应用程序。

在这个AD应用程序中,我在其清单中添加了一些像这样的角色:

"appRoles": [
    {
      "allowedMemberTypes": [
        "User"
      ],
      "displayName": "Approver",
      "id": "8f29f99b-5c77-4fba-a310-4a5c0574e8ff",
      "isEnabled": true,
      "description": "Approvers can mark documents as approved",
      "value": "approver"
    },

使用我的AD App ID发布到URL https://login.windows.net/ / oauth2 / token我收到一个令牌,我期望在此令牌中找到该角色。它不像这样工作,我找不到原因。

我想要的是使用Azure和我的API生成令牌,设置[Authorize(Role =“approver”)]来过滤使用同一租户的不同客户端访问的控制器。

1 个答案:

答案 0 :(得分:1)

如果您的方案是关于为用户/组分配应用程序角色。将用户分配给应用程序角色后(通过直接分配或通过分配给用户所属的组),Azure AD在用户登录应用程序时在令牌中包含角色声明。然后,应用程序可以使用.net等IsInRole(“reader”)或[Authorize(Roles =“reader”)]等构造来授权用户。你应该做:

"allowedMemberTypes": [
    "User"
  ],

然后您不需要使用客户端凭据流。 here是一篇关于如何配置该文章的文章,另请参阅代码示例here

如果您的方案是允许Web应用程序和充当客户端的Web API并访问其他资源API,则请求为其分配资源API的应用程序角色(使用客户端凭据流)。在Azure AD客户安装角色时,该角色将分配给客户端应用程序。您可以参考以下步骤来实现这一目标:

  1. 在经典azure广告门户网站中创建新的广告应用程序: enter image description here
  2. 设置登录网址和应用ID网址。

  3. 在“配置”选项卡上,向下滚动到“其他应用程序的权限”部分。在此处,通过首先选择客户端应用程序请求应用程序角色的API,然后在“应用程序权限”下拉列表中选择所需的应用程序角色来添加新权限。在我的API应用程序(名称是testRole)中,我设置了以下角色: enter image description here

  4. 然后选择应用程序角色: enter image description here

    1. 然后我们可以获取令牌,让我的网络应用程序使用客户端凭据流访问“testRole”API:

      发布https://login.microsoftonline.com/YourTenant/oauth2/token

      内容类型:application / x-www-form-urlencoded

      资源= HTTP%3A%2F%2Ftestbasic1.onmicrosoft.com%2Ftestrole&安培; CLIENT_ID =安培; client_secret =安培; grant_type = client_credentials

    2. 然后访问令牌将包含app角色: enter image description here

    3. 您可以使用here

      中的Azure AD在云应用程序中阅读有关基于角色的访问控制的更多信息

      修改

      在新门户中为其他应用程序设置权限: 1.单击左侧面板中的azure ad图标,选择Web应用程序,单击所需权限,单击添加,选择API,然后搜索要访问的API: enter image description here

      1. 然后选择所需的应用程序权限: enter image description here