ian*_*ley 6 asp.net-core-mvc openid-connect .net-core asp.net-core asp.net-core-1.0
我正在尝试处理要验证的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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
更新:通过以下调整使其工作:
options.Events = new OpenIdConnectEvents
{
OnRemoteFailure = context =>
{
context.HandleResponse();
context.Response.Redirect("AccessDenied?error=" + context.Failure.Message);
return Task.FromResult(0);
},
// ...
};
Run Code Online (Sandbox Code Playgroud)
您不应该在重定向之前调用 HandleResponse(),因为在这种情况下您“告诉”停止处理 HTTP Pipeline 中的请求。改成这样:
if (context.HttpContext.Request.Query.ContainsKey("error"))
{
context.Response.Redirect("/AccessDenied");
context.HandleResponse();
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1957 次 |
最近记录: |