在.NET Core OpenID Connect中间件中重定向?

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)

Set*_*Set 1

您不应该在重定向之前调用 HandleResponse(),因为在这种情况下您“告诉”停止处理 HTTP Pipeline 中的请求。改成这样:

        if (context.HttpContext.Request.Query.ContainsKey("error"))
        {
            context.Response.Redirect("/AccessDenied"); 
            context.HandleResponse(); 
        }
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,这并不能解决问题。用户仍然没有被重定向。 (2认同)