Я сохранил свое имя пользователя и пароль в утверждениях токена 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"
};
});
Любая помощь высоко ценится.