使用承载令牌进行身份验证会转到Home Controller而不是API Controller?

时间:2017-11-22 13:24:34

标签: angular authentication asp.net-core identityserver4 bearer-token

我有一个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事件遗漏了什么,以使代码继续使用请求网址?

顺便说一句,我正在点击该事件的断点,因此令牌已经过验证,然后立即在主控制器上点击我的索引

0 个答案:

没有答案