Asp.Net 认证后转换核心jwt令牌
Asp.Net Core jwt token is transformed after authentication
我有 email
声明的 Cognito ID 令牌。
..........
"iat": 164456734,
"jti": "81ac2634-e241-444f-88cf-eabf454644",
"email": "david@mail.com"
}
但是,在 asp net core jwt 中间件身份验证电子邮件声明从 email
类型转换为 C# 中的 http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
- ClaimTypes.Email
之后。
但后来我手动读取了令牌:
var token = new JwtSecurityTokenHandler().ReadJwtToken(jwtToken);
var claimsIdentity = new ClaimsIdentity(token.Claims);
var claimsPrincipal = new ClaimsPrincipal(claimsIdentity)
声明类型未转换并保持 email
。
为什么在 asp net 核心身份验证声明中转换为 http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
?
我可以在不手动修改 Claims
列表的情况下手动创建具有此 email
声明转换的 claimsPrincipal
吗?
其实已经被理解为ClaimTypes.Email
,然而这个属性返回的字符串是http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
(source).
令牌未被转换,除非专门这样做,而是被解析和理解为 ClaimTypes.Email
,实际令牌未被修改。
因此,Microsoft 和 OpenIDConnect 对于电子邮件声明名称应该是什么有不同的意见,要禁用此重新映射,您可以执行以下任一操作:
public void ConfigureServices(IServiceCollection services)
{
// By default, Microsoft has some legacy claim mapping that converts
// standard JWT claims into proprietary ones. This removes those mappings.
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
JwtSecurityTokenHandler.DefaultOutboundClaimTypeMap.Clear();
// Or set this flag to false
.AddJwtBearer(opt =>
{
...
opt.MapInboundClaims = false;
});
我有 email
声明的 Cognito ID 令牌。
..........
"iat": 164456734,
"jti": "81ac2634-e241-444f-88cf-eabf454644",
"email": "david@mail.com"
}
但是,在 asp net core jwt 中间件身份验证电子邮件声明从 email
类型转换为 C# 中的 http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
- ClaimTypes.Email
之后。
但后来我手动读取了令牌:
var token = new JwtSecurityTokenHandler().ReadJwtToken(jwtToken);
var claimsIdentity = new ClaimsIdentity(token.Claims);
var claimsPrincipal = new ClaimsPrincipal(claimsIdentity)
声明类型未转换并保持 email
。
为什么在 asp net 核心身份验证声明中转换为 http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
?
我可以在不手动修改 Claims
列表的情况下手动创建具有此 email
声明转换的 claimsPrincipal
吗?
其实已经被理解为ClaimTypes.Email
,然而这个属性返回的字符串是http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
(source).
令牌未被转换,除非专门这样做,而是被解析和理解为 ClaimTypes.Email
,实际令牌未被修改。
因此,Microsoft 和 OpenIDConnect 对于电子邮件声明名称应该是什么有不同的意见,要禁用此重新映射,您可以执行以下任一操作:
public void ConfigureServices(IServiceCollection services)
{
// By default, Microsoft has some legacy claim mapping that converts
// standard JWT claims into proprietary ones. This removes those mappings.
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
JwtSecurityTokenHandler.DefaultOutboundClaimTypeMap.Clear();
// Or set this flag to false
.AddJwtBearer(opt =>
{
...
opt.MapInboundClaims = false;
});