8

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

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

我真的找不到一个好地方来开始弄清楚这一点。谁能给我一个大纲或指出一个好的教程?

我应该提一下,我不是我们 Azure 帐户的管理员,所以我需要能够告诉我们的管理员如果需要任何设置,我该怎么做。

4

2 回答 2

9

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

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

于 2013-08-31T00:40:04.900 回答
9

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

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

  1. 使用组声明 - 您需要更改groupMembershipClaims应用程序清单中的值,稍后在应用程序中您可以检查ClaimsPrincipal.Current.FindFirst("groups").Value以查看组用户是什么(您只获得组 ID)。您可以编写自己的 Authorize 属性来使用它。更多信息

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

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

    [Authorize(Roles = “yourRoleName”)]

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

    您需要在应用的清单中编辑角色。更多信息在这里这里。需要在清单中设置的值在此处描述

真正奇怪的是,您不能从 Azure 网页为组分配多个角色。为此,您需要使用 azure graph api

如果Users and Groups在 Azure 门户中看不到选项卡,则可能需要 Azure AD 基本版或高级版。如果您正在使用免费的 azure 订阅,您可以使用免费的 Azure AD Premium 试用版来测试内容。

于 2016-06-16T13:52:03.463 回答