使用ADAL.js和ASP.NET Web API进行基于角色/组的授权

时间:2016-11-11 19:02:30

标签: azure-active-directory azure-ad-graph-api adal.js

我们计划实现的是前端Angular-2和后端ASP.NET Web API应用程序的基于角色的安全性。我们在ADAL.js的帮助下进行身份验证过程,并将令牌存储在本地存储中。我们还实现了here所示的方法,即调用Graphi API并让用户组将它们填充到声明中。

我的问题是:无论如何,我们可以将服务器的角色声明添加到驻留在本地存储中的bearerToken。或者有没有更好的方法来解决这个问题。

3 个答案:

答案 0 :(得分:0)

提到的代码示例根据组分配角色。如果您具有Azure AD基本版本,则支持将角色直接分配给用户/组。

  

我的问题是:无论如何,我们可以将服务器的角色声明添加到驻留在本地存储中的bearerToken。或者有没有更好的方法来解决这个问题。

是的,有可能。要发出角色声明,我们需要指定用户首先将角色分配给用户或组。然后,当用户获取令牌时,Azure AD将在令牌中发出相对角色声明。

您可以参考代码示例以使用here中的角色声明。

您可能也对groups claim developing感兴趣。

答案 1 :(得分:0)

好吧,我正在努力解决这个问题一段时间,我相信它已经弄清楚了。

首先, 在Azure AD中,将WebApi应用程序设置为Web App / API的应用程序类型。 转到Manifest文件并添加您的角色,如

[
    {
      "allowedMemberTypes": [
        "User"
      ],
      "displayName": "Reviewer",
      "id": "0238c2bb-9857-4d07-b760-a47ec621d57a",
      "isEnabled": true,
      "description": "Reviewer only have the ability to view tasks and their statuses.",
      "value": "reviewer"
    },
    {
      "allowedMemberTypes": [
        "User"
      ],
      "displayName": "Approver",
      "id": "000018cb-19e3-4f89-bf99-5d7acf30773b",
      "isEnabled": true,
      "description": "Approvers have the ability to change the status of tasks.",
      "value": "approver"
    }
  ]

然后将客户端应用程序创建为应用程序类型为Native应用程序,并为您在上面添加的服务添加所需权限。

在SPA Angular应用中添加类似

的内容
    var endPoints = {
        // "https://localhost:44386/" is the API URL
        // "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx" is the Service Application ID
        "https://localhost:44386/": "xxxxxxxxxxxxxxxxxxxxxxxxxx"
    };
    adalAuthenticationServiceProvider.init({
        instance: "https://login.microsoftonline.com/",
        // tenant is your tenant name (something like below)
        tenant: "{NAME}.onmicrosoft.com",
        // this is the Native app application ID (ClientID) you registered
        clientId: "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyy",
        extraQueryParameter: "nux=1",
        endpoints: endPoints
    }, $httpProvider);
}

]);

然后,在您的startup.cs中,您需要设置服务应用程序,如下所示:

     app.UseWindowsAzureActiveDirectoryBearerAuthentication(
             new WindowsAzureActiveDirectoryBearerAuthenticationOptions
             {
                 TokenValidationParameters = new TokenValidationParameters
                 {
                /* "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx" is the Service Application ID. (Same as you registered in the client app above)*/
                     ValidAudience = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
                     RoleClaimType = "roles"
                 },
               /*enant is your tenant name (same as you registered in client app above)*/
                 Tenant = "{NAME}.onmicrosoft.com"
             });

最后,您需要转到Azure Active Directory =>企业应用=>所有应用程序=>选择您的webAPI服务=>用户和群组=>然后将用户分配给角色。

当您在登录客户端应用程序进行身份验证并调用webapi时完成所有操作时,adal.js和ada-angular.js将放置包含角色的正确承载令牌

答案 2 :(得分:0)

很高兴学习这种方法。

特德,谢谢你分享你的解决方案!

对于那些不熟悉操作Azure AD清单文件的人。以下是一个很好的资源。 https://thinkthencode.wordpress.com/2016/04/24/azure-ad-using-app-roles-for-authorization/

"appRoles": [
        {
  "allowedMemberTypes": [
    "User"
  ],
  "displayName": "Reviewer",
  "id": "0238c2bb-9857-4d07-b760-a47ec621d57a",
  "isEnabled": true,
  "description": "Reviewer only have the ability to view tasks and their statuses.",
  "value": "reviewer"
},
{
  "allowedMemberTypes": [
    "User"
  ],
  "displayName": "Approver",
  "id": "000018cb-19e3-4f89-bf99-5d7acf30773b",
  "isEnabled": true,
  "description": "Approvers have the ability to change the status of tasks.",
  "value": "approver"
}
    ]