So, on signign in I create a JWT token:
var identity = AuthOptions.GetIdentity(user);
var now = DateTime.Now;
var jwt = new JwtSecurityToken(
issuer: AuthOptions.Issuer,
audience: AuthOptions.Audience,
notBefore: now,
claims: identity.Claims,
expires: null,
signingCredentials: new SigningCredentials(AuthOptions.GetSymmetricSecurityKey(),
SecurityAlgorithms.HmacSha256));
var encodedJwt = new JwtSecurityTokenHandler().WriteToken(jwt);
Where AuthOptions.GetIdentity is:
public static ClaimsIdentity GetIdentity(User user)
{
if (user == null) return null;
var claims = new List<Claim>
{
new Claim(ClaimsIdentity.DefaultNameClaimType, user.Uid.ToString())
};
ClaimsIdentity claimsIdentity = new ClaimsIdentity(claims, "Token", ClaimsIdentity.DefaultNameClaimType,
ClaimsIdentity.DefaultRoleClaimType);
return claimsIdentity;
}
I have Claims in identity variable (I saw this in the debugger), but when I try to get these claims from Token:
[AuthorizationNeeded]
[HttpPut]
[Route("/xxx/yyy")]
public IActionResult OnXxxYyy([FromQuery(Name = "xxx_uid")] Guid xxxUid)
{
Guid userUid = Guid.Empty;
Guid.TryParse(User.Claims.ToList()[0].Value, out userUid);
if (userUid == Guid.Empty)
return new BadRequestObjectResult(new
{
status = false,
response = "Invalid token"
});
// ...
}
I get empty User.Claims.ToList().
User.Identity also has empty meta.
I can't understand where are my Claims.