我已经设置了一个ASP.NET MVC核心项目,在创建项目时,我选择了Azure AD身份验证选项。我已将两个用户添加到Default Azure AD。一个在目录角色“全局管理员”中,另一个在目录角色“用户”中。 [请参阅下面的图片,例如全局管理员]
] 1
现在,身份验证工作正常。这两种用途都可以完美地登录WebApp。不起作用的是对单独的用户使用单独的权限/视图授权。在家庭控制器中,我正在尝试做类似的事情:
if(User.IsInRole('Admin')
return View("HomePageAdmin");
else
return View("NormalHomePage");
然而,它不起作用。对于这两个用户,它重定向到相同的“NormalHomePage”。
我错过了什么?
答案 0 :(得分:2)
Azure AD角色与应用程序中的角色不同。你应该看一下这个样本:https://github.com/Azure-Samples/active-directory-dotnet-webapp-roleclaims
您必须先在应用清单中定义应用中的角色。
然后将用户分配给他们。一旦你做了这两件事,你会得到的JWT称为“角色”,其中包含用户的角色。
答案 1 :(得分:1)
因此,经过大量的研究和搜索,通过AAD实现ASP.NET Core 2.0的AuthN实现方式相当简单。
-
所以,既然我们已经创建了所需的组(或组,根据您的需要),从AAD更新了WebApp的清单文件,复制了组的OBJECTID,现在它&# 39;是时候在Controller中简单地使用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集合用于检查它是否包含相应的组声明。
答案 2 :(得分:0)
没有进一步的信息很难说。 您的JWT是否暴露了正确的声明? 看一下索赔授权的工作设置。
一个也有帮助的问题:Azure Ad Returning Roles in Claims but User.IsInRole returns false