Identity Server 4 - 取消重定向到登录并返回 401

Etc*_*lon 3 redirect unauthorized identityserver4

我有一个没有Identity Server的 ASP.NET Core 2 Web 应用程序,我在其中配置了未经身份验证的 HTTP 请求的自动挑战,以不将用户重定向到登录页面,而只返回 401:

services.ConfigureApplicationCookie(config =>
        {
            config.Events.OnRedirectToLogin = ctx =>
            {
                ctx.Response.StatusCode = (int)System.Net.HttpStatusCode.Unauthorized;
                return Task.CompletedTask;
            };
        });
Run Code Online (Sandbox Code Playgroud)

如何通过 Identity Server 4 集成实现相同的目标?我尝试在AddOpenIdConnect配置方法中使用相同的代码:

.AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options =>
{
    options.Events.OnRedirectToIdentityProvider = ctx =>
    {
        ctx.Response.StatusCode = (int)System.Net.HttpStatusCode.Unauthorized;
        return Task.CompletedTask;
    };
    [...]
})
Run Code Online (Sandbox Code Playgroud)

但它不起作用,服务器无论如何都会返回 302...

Ano*_*tor 6

我想已经太晚了,但以下对我有用。如果有人有类似的问题。(context.HandleResponse();在 OP 情况下很重要)

options.Events.OnRedirectToIdentityProvider = context =>
                 {
                     if (context.Request.Path.StartsWithSegments("/api"))
                     {
                         if (context.Response.StatusCode == (int)HttpStatusCode.OK)
                         {
                             context.ProtocolMessage.State = options.StateDataFormat.Protect(context.Properties);
                             context.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
                             context.Response.Headers["Location"] = context.ProtocolMessage.CreateAuthenticationRequestUrl();
                         }
                         context.HandleResponse();
                     }
                     return Task.CompletedTask;
                 };
Run Code Online (Sandbox Code Playgroud)