我正在使用ASP.Net 5 MVC 6和JWT令牌,这些令牌是在用户位于该站点的子域的另一个站点上创建的.我的目标是将令牌与请求一起传递给此子域.如果用户碰巧尝试在没有标题中的正确令牌的情况下来到此子域名网址,那么我想将它们重定向到主站点登录页面.
在对最新的RC-1版本感到非常沮丧并且使用JWT代币SecureKey
而不是证书.我终于通过使用RC-2每晚构建版本来使用我的代码.现在我的问题是,我希望能够在未经身份验证的用户的情况下重定向到外部URL.以下是我的身份验证代码示例:
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"; ... });
任何想法如何设置RedirectUrl
何时使用JwtBearerAuthentication
???
由于一个简单的原因,没有这样的属性:JWT承载中间件(如Katana中更通用的OAuth2中间件)专为API身份验证而设计,而不是用于交互式身份验证.在这种情况下尝试触发重定向对于无头HTTP客户端没有多大意义.
这就是说,它并不意味着你不能重定向你的未经授权的用户在所有的,在某些时候.处理这种情况的最佳方法是捕获JWT中间件在客户端级别返回的401响应,并将用户重定向到相应的登录页面.例如,在JS应用程序中,这通常使用HTTP拦截器完成.
如果你真的确信 打破OAuth2承载规范是正确的事情,你可以使用OnChallenge
通知来做到这一点:
app.UseJwtBearerAuthentication(options => { options.Events = new JwtBearerEvents { OnChallenge = context => { context.Response.Redirect("http://localhost:54540/login"); context.HandleResponse(); return Task.FromResult(0); } }; });