我目前正在使用 Azure Active Directory 访问令牌和 .NET Core 3.1。我请求的访问令牌会产生以下声明。
{
...
"scp": "MyScope.Create MyScope.Search"
...
}
然而,在运行访问令牌的验证后,索赔的名称 "scp "改变为" "。http:/schemas.microsoft.comidentityclaimsscope"
SecurityToken securityToken;
ClaimsPrincipal claimsPrincipal = tokenValidator.ValidateToken(accessToken, myValidationParameters, out securityToken);
return claimsPrincipal;
另外,正如你在图片中所看到的,并不是所有的权利要求都被改变了,有些权利要求保持了创建时的状态,比如审计或信息系统,但scp却变成了" "。http:/schemas.microsoft..." (就像这是一个v1标记,但它是v2)
这是预料中的事情,还是我应该配置的东西,这样债权就会保持应有的状态。
谢谢!我目前正在使用 Azure Active Directory 访问令牌和 .NET Core 3.1。
这是预期的行为,有一个叫做InboundClaimTypeMap的东西,它在某个地方被调用来将它们转化为长格式,以便与其他一些东西如wsfed一起工作。有一个方法可以解决这个问题
根据这个帖子。https:/github.comdotnetaspnetcoreissues4660。 在最底层,他提到你可以把这个放在你的创业中,以防止重新映射到遗留的要求
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
JwtSecurityTokenHandler.DefaultOutboundClaimTypeMap.Clear();
希望这能让你明白。
也有这个选项,在 ConfigureServices()
关于 Startup.cs:
JwtSecurityTokenHandler.DefaultMapInboundClaims = false;
这个标志可以防止映射,所以你的索赔名称不会改变。