C# .net core[授权]使用与AAD组的ClaimsEntity
我在我的C# .net core[授权]使用与AAD组的ClaimsEntity,c#,asp.net-core,authorization,azure-active-directory,C#,Asp.net Core,Authorization,Azure Active Directory,我在我的((System.Security.Claims.ClaimsIdentity)User.Identity)中看到了这一点 我如何利用从Azure广告中获得的这些组GUID(基于组成员身份保护端点) [授权(角色=”“)] 或 [授权(“”] 或者我需要在startup.cs文件中设置一些内容吗?您可以在asp.net core中使用策略,使用具有命名策略的属性,然后在startup中定义策略以要求组声明并设置允许的组ID: public void Configur
((System.Security.Claims.ClaimsIdentity)User.Identity)中看到了这一点
我如何利用从Azure广告中获得的这些组GUID(基于组成员身份保护端点)
[授权(角色=”“)]
或
[授权(“”]
或者我需要在startup.cs
文件中设置一些内容吗?您可以在asp.net core中使用策略,使用具有命名策略的属性,然后在startup中定义策略以要求组声明并设置允许的组ID:
public void ConfigureServices(IServiceCollection services)
{
// Add MVC services to the services container.
services.AddMvc();
// Add Authentication services.
services.AddAuthentication(sharedOptions => sharedOptions.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme);
services.AddAuthorization(options =>
{
options.AddPolicy(
"CanAccessGroup",
policyBuilder => policyBuilder.RequireClaim("groups", "8e39f882-3453-4aeb-9efa-f6ac6ad8e2e0"));
});
}
然后在控制器中:
[Authorize(Policy = "CanAccessGroup")]
public IActionResult Contact()
{
ViewData["Message"] = "Your contact page.";
return View();
}
如果组id不在用户组声明中,它会将用户重定向到“拒绝访问”页面,您也可以编写策略规则逻辑,如图所示。我认为您也可以设置RoleClaimType,然后使用角色,但这是一个更好的解决方案。@juunas:不鼓励使用角色,因为它非常不灵活,需要对角色进行硬编码。而策略允许模块插入自己的策略或覆盖现有的策略。有了声明,你可以用角色做任何你能做的事情,还有更多,这正是我说这更好的原因;)如何授予一个资源对多个组的访问权限?在我的应用程序的大部分区域中,我希望特定的部门能够访问站点的特定部分,但允许管理员访问任何地方。
public void ConfigureServices(IServiceCollection services)
{
// Add MVC services to the services container.
services.AddMvc();
// Add Authentication services.
services.AddAuthentication(sharedOptions => sharedOptions.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme);
services.AddAuthorization(options =>
{
options.AddPolicy(
"CanAccessGroup",
policyBuilder => policyBuilder.RequireClaim("groups", "8e39f882-3453-4aeb-9efa-f6ac6ad8e2e0"));
});
}
[Authorize(Policy = "CanAccessGroup")]
public IActionResult Contact()
{
ViewData["Message"] = "Your contact page.";
return View();
}