Невозможно получить данные утверждений из токена JWT - PullRequest
0 голосов
/ 07 декабря 2018

Я сохранил свое имя пользователя и пароль в утверждениях токена JWT следующим образом: -

 var claims = new Claim[]
             {
                  new Claim("Id", id.ToString()),
            new Claim(JwtRegisteredClaimNames.Email, email),
            new Claim(JwtRegisteredClaimNames.Acr, roleName)
             };
JwtSecurityToken tokeOptions = new JwtSecurityToken(
        issuer: Constant.JsonTokenMessage.Issuer,
        audience: Constant.JsonTokenMessage.Audience,
        claims: claims,
        expires: DateTime.Now.AddMinutes(5),
        signingCredentials: signinCredentials
    );

, но когда я попытался получить его, используя приведенный ниже код, он дал мне пустую коллекцию заявок и, следовательно, ссылка на объект не была установленак ошибке экземпляра.

this.User.Claims.First(i => i.Type == "Id").Value.

Startup.cs Код метода ConfigureService выглядит следующим образом

 SymmetricSecurityKey secretKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("SuperSecretKey@123"));
            services.AddAuthentication(x =>
            {
                x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
                x.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
            })
             .AddJwtBearer(x =>
             {
                 x.Events = new JwtBearerEvents
                 {
                     OnTokenValidated = context =>
                     {
                         var userService = context.HttpContext.RequestServices.GetRequiredService<IUserService>();
                         var userId = Convert.ToInt32( context.Principal.Identity.Name);
                         var user = userService.GetUser(userId);
                         if (user == null)
                         {
                            // return unauthorized if user no longer exists
                            context.Fail("Unauthorized");
                         }
                         var httpContxt = httpContextAccessor.HttpContext;
                         httpContxt.Items["AuthenticationTokenUser"] = user;
                         httpContxt.Items["AuthenticationAccessTokenValid"] = true;
                         return Task.CompletedTask;
                     }
                 };
                 x.RequireHttpsMetadata = false;
                 x.SaveToken = true;
                 x.TokenValidationParameters = new TokenValidationParameters
                 {
                     ValidateIssuerSigningKey = true,
                     IssuerSigningKey = secretKey,
                     ValidateIssuer = false,
                     ValidateAudience = true,
                     ValidAudience = "Example",
                     ValidIssuer= "Example"

                 };
             });

Любая помощь высоко ценится.

...