我有一个没有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;
};
});
如何通过Identity Server 4集成实现相同的目标?我尝试在AddOpenIdConnect配置方法中使用相同的代码:
.AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options =>
{
options.Events.OnRedirectToIdentityProvider = ctx =>
{
ctx.Response.StatusCode = (int)System.Net.HttpStatusCode.Unauthorized;
return Task.CompletedTask;
};
[...]
})
它不起作用,服务器无论如何返回302 ...
我猜太晚了,但是后来为我工作了。如果有人有类似的问题。 (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;
};