我们计划实现的是前端Angular-2和后端ASP.NET Web API应用程序的基于角色的安全性。我们在ADAL.js的帮助下进行身份验证过程,并将令牌存储在本地存储中。我们还实现了here所示的方法,即调用Graphi API并让用户组将它们填充到声明中。
我的问题是:无论如何,我们可以将服务器的角色声明添加到驻留在本地存储中的bearerToken。或者有没有更好的方法来解决这个问题。
答案 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"
}
]