【问题标题】:Authorizing users from Azure Active Directory从 Azure Active Directory 授权用户
【发布时间】:2018-03-08 20:19:09
【问题描述】:

我已经设置了一个 ASP.NET MVC Core 项目,并在创建项目时选择了 Azure AD 身份验证选项。我已将两个用户添加到默认 Azure AD。一个在目录角色“全局管理员”中,另一个在目录角色“用户”中。 [全局管理员示例见下图]

]1

现在,身份验证工作正常。这两种用途都可以完美登录WebApp。不起作用的是对不同用户的不同权限/视图使用授权。在 Home Controller 中,我正在尝试执行以下操作:

if(User.IsInRole('Admin')
 return View("HomePageAdmin");
else
 return View("NormalHomePage");

但是,它不起作用。对于两个用户,它都重定向到相同的“NormalHomePage”。

我错过了什么?

【问题讨论】:

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


    【解决方案1】:

    没有更多信息很难说。 您的 JWT 是否公开了正确的声明? 查看索赔授权的工作设置。

    https://github.com/Azure-Samples/active-directory-dotnet-webapp-roleclaims/blob/master/WebApp-RoleClaims-DotNet/App_Start/Startup.Auth.cs

    一个也可以提供帮助的问题:Azure Ad Returning Roles in Claims but User.IsInRole returns false

    【讨论】:

      【解决方案2】:

      Azure AD 角色与应用程序中的角色不同。您可能应该看看这个示例:https://github.com/Azure-Samples/active-directory-dotnet-webapp-roleclaims

      您必须首先在应用清单中定义应用中的角色。

      然后将用户分配给他们。一旦你做了这两件事,你得到的 JWT 中就会有一个名为“roles”的声明,其中包含用户的角色。

      【讨论】:

      • 嗯,这是一篇很酷的文章,但不适用于 ASP:NET MVC Core 2.0
      【解决方案3】:

      所以,经过大量的寻找和搜索,通过 AAD 为 ASP.NET Core 2.0 实现 AuthN 的方式原来是相当简单的。

      • 我必须在 AAD 中创建一个新组,为其命名(在我的例子中为“ShopAdmin”),然后简单地添加我想要授予管理员权限的用户。
      • 打开 WebApp 的清单文件,将“groupMembershipClaims”字段从 null 更新为“SecurityGroup”
      • 再次从 AAD 打开组并从那里复制对象 ID。我们将在控制器的 C# 代码中使用此 OBJECT ID。

      --

        1234563控制器中的 OBJECTID。就我而言,这很简单:
      • public bool CheckIfAdmin() { if (User.Claims.FirstOrDefault(c => c.Type == "groups" && c.Value.Equals("42f51be8-28c4-995d-a69f-f6f42f96a5cd", StringComparison.CurrentCultureIgnoreCase)) != null) return true; else return false; }

      • 因此,这里基本上使用用户属性的 Claims 集合来检查它是否包含相应的组声明。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-10
        • 2022-11-05
        • 1970-01-01
        • 1970-01-01
        • 2021-05-06
        • 1970-01-01
        • 2017-03-11
        • 2020-05-17
        相关资源
        最近更新 更多