我正在尝试对服务器进行自己的自定义身份验证。但是,即使在方法上具有[AllowAnonymous]属性,也会为每个端点调用它。使用我当前的代码,即使在允许匿名函数上,我也可以每次在HandleAuthenticateAsync方法中达到断点。

AddCustomAuthentication正确添加身份验证处理程序

        public void ConfigureServices(IServiceCollection services)
        {
            //services.AddAuthorization();
            services.AddAuthentication(options =>
            {
                // the scheme name has to match the value we're going to use in AuthenticationBuilder.AddScheme(...)
                options.DefaultAuthenticateScheme = "scheme";
                options.DefaultChallengeScheme = "scheme";
            })
            .AddCustomAuthentication(o => { });
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseAuthentication();

            app.UseMvc();
        }


...

    public class CustomAuthenticationHandler : AuthenticationHandler<CustomAuthenticationOptions>
    {

        public RvxAuthenticationHandler(
        IOptionsMonitor<RvxAuthenticationOptions> options,
        ILoggerFactory logger,
        UrlEncoder encoder,
        ISystemClock clock) : base(options, logger, encoder, clock)
        {
        }


        protected override async Task<AuthenticateResult> HandleAuthenticateAsync()
        {
            var token = Request.Headers["token"].ToString();

            if (string.IsNullOrWhiteSpace(token))
            {
                return AuthenticateResult.Fail("Invalid Credentials");
            }


            return AuthenticateResult.Success(new AuthenticationTicket(new System.Security.Claims.ClaimsPrincipal(), "Hi"));
        }

最佳答案

这就是它设计的工作方式。

验证步骤由app.UseAuthentication()调用添加的ASP.Net中间件为每个传入呼叫执行。该步骤仅为请求设置IPrincipal实例。

如果身份验证成功,则请求将获取您传递给IPrincipalAuthenticationTicket

如果失败,请求将在其IIdentity中获得未经身份验证的IPrincipalprincipal.Identity.IsAuthenticated将为false

然后,该请求仍将传递给下一个中间件,并最终传递给您的终结点方法。

AuthorizeAttribute阻止请求到达受保护的方法,而不是任何AuthenticationHandler<T>

10-07 15:52
查看更多