我有一个Angular2 ASP Core 1.1应用程序,我们正在使用Identity Server进行身份验证。我们已经通过身份服务器设置了用户凭据,但我们还需要使用承载令牌对另一台服务器进行身份验证。
这是我的验证码。如果需要,我可以发布更多内容,但我确定下面介绍的问题位于OnTokenValidated
部分的此代码段中。我想我没有正确回归任务?
app.UseJwtBearerAuthentication(new JwtBearerOptions
{
AutomaticAuthenticate = true,
Authority = "http://localhost:5000/",
AuthenticationScheme = JwtBearerDefaults.AuthenticationScheme,
Audience = "ServerAPI",
RequireHttpsMetadata = false,
SaveToken = true,
Events = new JwtBearerEvents() {
OnTokenValidated = context =>
{
List<Claim> claims = context.HttpContext.User.Claims.ToList();
var userIdClaim = claims.FirstOrDefault(x => x.Type == JwtClaimTypes.Subject);
// Find claim identity attached to principal.
var claimIdentity = (ClaimsIdentity)context.Ticket.Principal.Identity;
Claim claim = new Claim("admin", "Administrator");
claimIdentity.AddClaim(claim);
context.HttpContext.User = new ClaimsPrincipal(claimIdentity);
return Task.FromResult(0);
},
OnAuthenticationFailed = (jwt) =>
{
if (jwt.Request.Path.StartsWithSegments("/api") && jwt.Response.StatusCode == 200)
{
jwt.Response.StatusCode = 403;
jwt.State = EventResultState.HandledResponse;
jwt.Response.Redirect(jwt.Request.Host.ToString());
}
return Task.FromException(jwt.Exception);
}
}
});
令牌得到验证,但是之后,它会转到我的家庭控制器,而不是API控制器?我可以将路由添加到声明中并从中重定向到API,但我觉得非常有信心这不是正确的方法。
我为OnTokenValidated
事件遗漏了什么,以使代码继续使用请求网址?
顺便说一句,我正在点击该事件的断点,因此令牌已经过验证,然后立即在主控制器上点击我的索引