Overriden HandleUnauthorizedAsync不被称为.NET Core

Top*_*don 8 .net unauthorized custom-authentication asp.net-core

我已经实现了自己的自定义身份验证中间件和处理程序,并在应用启动时配置了它们.这一切都很好.

在我的自定义auth处理程序中,我已经覆盖了HandleAuthenticateAsync()以执行我自己的自定义身份验证,我还重写了HandleUnauthorizedAsync()以便将用户重定向到登录页面,但是这不会被调用.

浏览器在响应中收到401(未授权).我期待调用我的HandleUnauthorizedAsync().

我在这里没有正确理解管道吗?

谢谢

mih*_*ins 12

user1859022 对我有帮助,但我不想为每个[Authorize]. 并且指定一开始DefaultAuthenticateScheme也不起作用。

我的错误有点愚蠢。我有两个app.UseAuthorization()app.UseAuthentication()当然的顺序是错误的。正确的版本是

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

        app.UseHttpsRedirection();

        app.UseRouting();

        app.UseAuthentication();
        app.UseAuthorization();

        app.UseEndpoints(endpoints => endpoints.MapControllers());
}
Run Code Online (Sandbox Code Playgroud)

所以请确保在之前UseAuthentication调用。 UseAuthorization


use*_*022 6

在我的情况下,未调用我的处理程序的原因AuthenticationScheme是未选择my 作为默认值。我必须将其包括在我的Authorize属性中,如下所示:

[HttpGet]
[Authorize(AuthenticationSchemes= "MyAuth")]
public IEnumerable<string> Get()
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句:该AutomaticChallenge选项似乎已被删除.net core 2.0


Kob*_*ser 5

上述解决方案对我也有效,我可以使用以下代码段对其进行改进,然后无需在[Authorize]属性中指定身份验证方案名称。在AddAuthentication之前调用方法很重要AddMvc

public void ConfigureServices(IServiceCollection services)
{
    //must be placed before the AddMvc call
    services.AddAuthentication(options => 
                {                    
                    options.DefaultAuthenticateScheme = "MyAuth";
                    options.DefaultChallengeScheme = "MyAuth";
                })
                .AddCustomAuth(o => { });
    
    services.AddMvc();
}
Run Code Online (Sandbox Code Playgroud)

  • 同样,app.UseAuthenication() 必须在 app.UseMvc() 之前调用 (5认同)