对于未经身份validation的重定向到URL而不是401

我正在使用ASP.Net 5 MVC 6和JWT令牌,这些令牌是在用户位于该站点是其子域的另一个站点时创建的。 我的目标是将令牌和请求一起传递给此子域。 如果用户碰巧尝试在没有标题中的正确令牌的情况下来到此子域名url,那么我想将它们重定向到主站点登录页面。

在对最新的RC-1版本感到非常沮丧之后,使用带有SecureKey而不是证书的JWT令牌。 我终于通过使用RC-2夜间构建版本来使用我的代码。 现在我的问题是,我希望能够在未经身份validation的用户的情况下重定向到外部URL。 以下是我的身份validation代码示例:

  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的参数

  app.UseOpenIdConnectAuthentication(options => { ... options.RedirectUri = "https://localhost:44300"; ... }); 

任何想法如何在使用JwtBearerAuthentication时设置RedirectUrl ???

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

也就是说,这并不意味着您根本无法重定向未经身份validation的用户。 处理这种情况的最佳方法是捕获客户端级别的JWT中间件返回的401响应,并将用户重定向到相应的登录页面。 例如,在JS应用程序中, 这通常使用HTTP拦截器完成 。

如果你真的确信 打破OAuth2承载规范是正确的做法,你可以使用OnChallenge通知来做到这OnChallenge

 app.UseJwtBearerAuthentication(options => { options.Events = new JwtBearerEvents { OnChallenge = context => { context.Response.Redirect("http://localhost:54540/login"); context.HandleResponse(); return Task.FromResult(0); } }; });