加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-core – .NET Core中的重定向OpenID Connect中间件?

发布时间:2020-12-16 09:42:24 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试处理一个场景,当我正在验证的OpenID Connect服务器返回一组特定的查询字符串时.当条件匹配时,我想基本上将用户重定向到“拒绝访问”页面.无论出于何种原因,下面包含重定向的注释行实际上都不会触发.有没有更好/不同的方式去做我想要的事情? 以下
我正在尝试处理一个场景,当我正在验证的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);
    },// ...
};

解决方法

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

if (context.HttpContext.Request.Query.ContainsKey("error"))
        {
            context.Response.Redirect("/AccessDenied"); 
            context.HandleResponse(); 
        }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读