我正在尝试处理我正在进行身份验证的OpenID Connect服务器返回一组特定查询字符串时的情况。当条件匹配时,我想基本上将用户重定向到"访问被拒绝"页。无论出于何种原因,下面包含重定向的注释行实际上都不会触发。是否有更好/不同的方式来做我以后的事情?
以下是如何在Startup.cs中配置OpenID Connect中间件:
services.Configure<OpenIdConnectOptions>(options =>
{
// ...
options.Events = new OpenIdConnectEvents
{
OnMessageReceived = context =>
{
if (context.HttpContext.Request.Query.ContainsKey("error"))
{
context.HandleResponse(); // <-- Fires
context.Response.Redirect("/AccessDenied"); // <-- Redirect fires but user is not redirected
}
return Task.FromResult(0);
}
}
}
更新:使用以下调整:
options.Events = new OpenIdConnectEvents
{
OnRemoteFailure = context =>
{
context.HandleResponse();
context.Response.Redirect("AccessDenied?error=" + context.Failure.Message);
return Task.FromResult(0);
},
// ...
};
答案 0 :(得分:1)
你不应该在重定向之前调用HandleResponse(),因为在这种情况下你&#34;告诉&#34;停止HTTP管道中的处理请求。改为:
if (context.HttpContext.Request.Query.ContainsKey("error"))
{
context.Response.Redirect("/AccessDenied");
context.HandleResponse();
}