对于未经身份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); } }; });