如何通过MVC Azure AD身份验证从AD获取角色?

时间:2013-08-30 20:42:35

标签: asp.net-mvc azure active-directory

我设置了MVC 4应用程序,并在我们的Azure AD服务器上添加了身份验证,如下所示:http://msdn.microsoft.com/en-us/library/windowsazure/dn151790.aspx

身份验证按预期工作。但是,我没有默认任何角色。应该创建几个AD组,我想使用它们通过MVC中的[Authorize]属性来限制应用程序。

我真的找不到一个好地方甚至开始搞清楚这一点。任何人都可以给我一个大纲或指向我一个好的教程吗?

我应该提一下,我不是Azure帐户的管理员,因此如果需要进行任何设置,我需要告诉管理员该怎么做。

2 个答案:

答案 0 :(得分:9)

首先,Azure AD返回的令牌当前不包含角色或组的声明,因此您需要从Graph API获取它们。其次,Graph API返回的Azure AD中的角色不一定用于ISV / LoB应用程序,通常您应该使用安全组进行授权。要执行授权,您应该使用Graph API中的checkMemberGroups或getMemberGroups操作,这些操作是可传递的并且对此有效。

如果您按顺序查看以下资源,我认为您的问题将得到解答。您将学习如何对Graph进行身份验证,调用它,并配置您的应用程序以使用组操作的结果来执行授权:

答案 1 :(得分:7)

肖恩的回答有点过时了。您现在可以配置Azure AD,以便在JWT令牌中包含组或角色,以便将其包含在ClaimsPrincipal.Current.Claims中,以便标准[Authorize(Roles = "yourRoleName")]属性可用。

Here是介绍帖。这基本上说你有两个选择:

  1. 使用群组声明 - 您需要在应用清单中更改groupMembershipClaims值,稍后在应用中,您可以检查ClaimsPrincipal.Current.FindFirst("groups").Value以查看用户所在的群组(您只能获得群组ID) 。您可以编写自己的使用此属性的Authorize属性。 more info

  2. 为您的应用程序定义角色,然后使用普通代码测试用户是否在角色中:

    [PrincipalPermission(SecurityAction.Demand, Role = “yourRoleName”)]

    [Authorize(Roles = “yourRoleName”)]

    if (ClaimsPrincipal.Current.IsInRole(“yourRoleName”)) { //do something }

    您需要在应用的清单中编辑角色。 更多信息herehere。需要在清单中设置的值描述为here

  3. 真正奇怪的是,您无法从Azure网页分配多个角色。您需要使用azure graph api

    如果您在Azure门户中看不到Users and Groups标签,则可能需要Azure AD Basic或Premium版本。如果您正在使用免费的azure订阅,则可以使用free Azure AD Premium trial来测试内容。