我正在尝试通过群组为我的应用程序设置基于角色的访问权限。我已经关注了以下文章(很抱歉发布了代码链接,不允许发布超过1个链接)。但是我的应用程序没有收到任何群组声明。
https://www.simple-talk.com/cloud/security-and-compliance/azure-active-directory-part-4-group-claims/
http://www.dushyantgill.com/blog/2014/12/10/roles-based-access-control-in-cloud-applications-using-azure-ad/
到目前为止我做了什么
清单文件
"appId": "d754a979-689d-45f8-8c63-983de55840da"
"appRoles": [
{
"allowedMemberTypes": [
"User"
],
"displayName": "Manager",
"id": "1e06dae5-467a-40cf-a9a6-14baf3969472",
"isEnabled": true,
"description": "Manages",
"value": "Manager"
},
{
"allowedMemberTypes": [
"User"
],
"displayName": "Issuer",
"id": "da85f458-720d-4c09-861f-92f5c465ee3e",
"isEnabled": true,
"description": "Issues",
"value": "Issuer"
},
{
"allowedMemberTypes": [
"User"
],
"displayName": "Supervisor",
"id": "d64807d4-6e12-4637-a049-2a61b250507b",
"isEnabled": true,
"description": "Can perform any function",
"value": "Supervisor"
}
],
"availableToOtherTenants": false,
"displayName": "traffic",
"errorUrl": null,
"groupMembershipClaims": "SecurityGroup",
"homepage": "https://myapp.ca",
"identifierUris": [
"https://myapp.azurewebsites.net/"
],
还在azure上向app添加了相关组(假设该组至少包含一个用户) Groups Assignment on Azure
但我在我的应用中没有获得任何群组声明。以下代码始终为零计数。有任何想法吗?提前谢谢。
var claims = ClaimsPrincipal.Current.Claims.Where(c => c.Type == "groups");
Debug.Print("Total Group Claims in HomeController #### "+claims.Count());
foreach (Claim c in claims)
{
Debug.Print("%%%%%%%% " + c.Value + " %%% VALUETYPE %%% " + c.Type);
}
答案 0 :(得分:1)
问题解决了。我正在咆哮错误的应用程序配置文件。我的AD注册了许多应用程序(沙盒,测试等)。事实证明我正在编辑错误的个人资料。我在问题中提到的步骤确实有效。感谢@Fei Xue - MSFT的时间和帮助。
答案 1 :(得分:0)
由于您在应用程序的清单中指定了SecurityGroup
,因此Azure AD仅发出此类型组声明。您可以将SecurityGroup
更改为All
,以使Azure AD发布各种群组声明。
并且还要确保用户是少于150个组的成员,因为组的数量有限(请参阅here)。
并确保已为用户登录Web应用程序分配了该组。您可以参考代码示例active-directory-dotnet-webapp-groupclaims来显示群组声明。
答案 2 :(得分:0)
我在这里遇到的另一个问题是:耐心!
将清单中的groupMembershipClaims从null更改为SecurityGroup之后,您需要等待它。有时可能需要一个小时。我以为我错过了权限等等,但是只要登录的用户可以访问AD中的读取组(通常是这样做的),就不需要额外的权限。
因此要获得与Azure AD一起使用的组授权:
<table class="table">
@foreach (var claim in User.Claims)
{
<tr>
<td>@claim.Type</td>
<td>@claim.Value</td>
</tr>
}
</table>
答案 3 :(得分:0)
我遇到了类似的问题,即没有将组作为索赔退还。
要解决此问题,我做了两件事:
在Azure AD,应用程序注册,[用于访问AD的应用程序注册表],令牌配置下,有一个按钮:“添加组声明”。我打勾了所有的框。我可以确认此步骤是必需的。
在同一屏幕上,左侧菜单还具有“ API权限”。最初我只有“ User.Read”。我有“ User.ReadAll”,“ Directory.Read”和“ Directory.ReadAll”。我已经在其他步骤之前完成了此操作,所以我不确定是否有必要。