首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重定向到URL,而不是401,用于未经身份验证

重定向到URL,而不是401,用于未经身份验证
EN

Stack Overflow用户
提问于 2016-01-06 09:36:48
回答 1查看 3.4K关注 0票数 2

我使用的是ASP.Net 5 MVC 6和JWT令牌,这些标记是在用户位于另一个站点上时创建的,该站点是该站点的子域。我的目标是将令牌和请求一起传递给这个子域。如果用户碰巧试图进入这个子域url,而没有适当的标头,那么我想将他们重定向到主站点登录页面。

在对最新的RC-1版本和使用JWT令牌(而不是证书)非常失望之后。通过使用RC-2夜间构建版本,我终于让我的代码工作起来了。现在,我的问题是,对于未经身份验证的用户,我希望能够重定向到外部url。下面是我的身份验证代码的一个示例:

代码语言:javascript
复制
        var key = "mysupersecretkey=";
        var encodedkey2 = Convert.FromBase64String(key);
        app.UseJwtBearerAuthentication(options =>
        {
            options.AutomaticAuthenticate = true;
            options.AutomaticChallenge = true;
            options.TokenValidationParameters.IssuerSigningKey = new SymmetricSecurityKey(encodedkey2);
            options.TokenValidationParameters.ValidIssuer = "https://tv.alsdkfalsdkf.com/xxx/yyy";
            options.TokenValidationParameters.ValidateIssuer = true;
            options.TokenValidationParameters.ValidAudience = "https://www.sdgfllfsdkgh.com/";
            options.TokenValidationParameters.ValidateAudience = true;
            options.Configuration = new Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectConfiguration()
            {
                Issuer = "https://tv.sdfkaysdf.com/xxx/yyy"
            };
        });

现在我看到了其他使用OpedId的例子,它们非常简单,有一个名为RedirectUrl的参数

代码语言:javascript
复制
 app.UseOpenIdConnectAuthentication(options => {
    ...
    options.RedirectUri = "https://localhost:44300";
    ...
 });

知道如何在使用RedirectUrl时设置JwtBearerAuthentication吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-06 11:33:58

没有这样的属性有一个简单的原因: JWT承载中间件(像Katana中更通用的OAuth2中间件)是为API身份验证而设计的,而不是为交互式身份验证而设计的。在这种情况下,试图触发重定向对于无头HTTP客户端来说没有多大意义。

尽管如此,这并不意味着您不能在任何时候重定向未经身份验证的用户。处理这一问题的最佳方法是在客户端级别捕获JWT中间件返回的401响应,并将用户重定向到适当的登录页面。例如,在JS应用程序中,这通常是使用HTTP拦截器完成的

如果您确信确实认为 违反OAuth2承载规范是正确的,那么可以使用OnChallenge通知:

代码语言:javascript
复制
app.UseJwtBearerAuthentication(options => {
    options.Events = new JwtBearerEvents {
        OnChallenge = context => {
            context.Response.Redirect("http://localhost:54540/login");
            context.HandleResponse();

            return Task.FromResult(0);
        }
    };
});
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34629768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档