我使用的是ASP.Net 5 MVC 6和JWT令牌,这些标记是在用户位于另一个站点上时创建的,该站点是该站点的子域。我的目标是将令牌和请求一起传递给这个子域。如果用户碰巧试图进入这个子域url,而没有适当的标头,那么我想将他们重定向到主站点登录页面。
在对最新的RC-1版本和使用JWT令牌(而不是证书)非常失望之后。通过使用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吗?
发布于 2016-01-06 11:33:58
没有这样的属性有一个简单的原因: 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);
}
};
});https://stackoverflow.com/questions/34629768
复制相似问题