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# ASP.NET Core 2.2授权未授权_C#_Asp.net Core_Authorization - Fatal编程技术网

C# ASP.NET Core 2.2授权未授权

C# ASP.NET Core 2.2授权未授权,c#,asp.net-core,authorization,C#,Asp.net Core,Authorization,我正在编写一个简单的授权示例,使用声明,但授权未被授予 为了清楚起见,我使用的是ASP.NET Core 2.2.4 startup.cs配置为: public void ConfigureServices(IServiceCollection services) { services.AddMvc(); ... services.AddIdentity<IdentityUser, IdentityRole>(option => { option.Pas

我正在编写一个简单的授权示例,使用声明,但授权未被授予

为了清楚起见,我使用的是ASP.NET Core 2.2.4

startup.cs配置为:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    ...
    services.AddIdentity<IdentityUser, IdentityRole>(option => { option.Password = new PasswordOptions { ... }; };
    services.ConfigureApplicationCookie(option => { option.LoginPath = "/logins/Index"; });

    services.AddAuthorization(option => 
    {
        option.AddPolicy("EditorOver18Policy", policy =>
        {
            policy.RequireClaim("Over18Claim");
        });
    });
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseAuthentication();
    app.UseMvc(routes =>
        { ... });
}
简单地说,当a运行它时,请确保我刚刚登录并因此获得了声明,我会收到一个拒绝访问错误(如果是葡萄牙语的话,很抱歉):


我缺少什么?

要添加自定义声明,您可以实现自定义的
IUserClaimsPrincipalFactory
或使用
UserClaimsPrincipalFactory
作为基类:

public class ApplicationClaimsIdentityFactory : Microsoft.AspNetCore.Identity.UserClaimsPrincipalFactory<IdentityUser>
{
    UserManager<IdentityUser> _userManager;
    public ApplicationClaimsIdentityFactory(UserManager<IdentityUser> userManager,
        IOptions<IdentityOptions> optionsAccessor) : base(userManager, optionsAccessor)
    { }
    public async override Task<ClaimsPrincipal> CreateAsync(IdentityUser user)
    {
        var principal = await base.CreateAsync(user);

            ((ClaimsIdentity)principal.Identity).AddClaims(new[] {
            new Claim("Over18Claim", "true")
        });

        return principal;
    }
}
[Authorize (policy: "EditorOver18Policy")]
public IActionResult Upload()
{
    ...
}
public class ApplicationClaimsIdentityFactory : Microsoft.AspNetCore.Identity.UserClaimsPrincipalFactory<IdentityUser>
{
    UserManager<IdentityUser> _userManager;
    public ApplicationClaimsIdentityFactory(UserManager<IdentityUser> userManager,
        IOptions<IdentityOptions> optionsAccessor) : base(userManager, optionsAccessor)
    { }
    public async override Task<ClaimsPrincipal> CreateAsync(IdentityUser user)
    {
        var principal = await base.CreateAsync(user);

            ((ClaimsIdentity)principal.Identity).AddClaims(new[] {
            new Claim("Over18Claim", "true")
        });

        return principal;
    }
}
services.AddScoped<IUserClaimsPrincipalFactory<IdentityUser>, ApplicationClaimsIdentityFactory>();