Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .net core[授权]使用与AAD组的ClaimsEntity_C#_Asp.net Core_Authorization_Azure Active Directory - Fatal编程技术网

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();
        }