通过ISecurityTokenValidator.ValidateToken获得的ClaimsPrincipal正在更改SCP claim的名称。

问题描述 投票:0回答:1

我目前正在使用 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)

这是预料中的事情,还是我应该配置的东西,这样债权就会保持应有的状态。

claims after validation

谢谢!我目前正在使用 Azure Active Directory 访问令牌和 .NET Core 3.1。

c# access-token msal .net-core-3.1
1个回答
2
投票

这是预期的行为,有一个叫做InboundClaimTypeMap的东西,它在某个地方被调用来将它们转化为长格式,以便与其他一些东西如wsfed一起工作。有一个方法可以解决这个问题

根据这个帖子。https:/github.comdotnetaspnetcoreissues4660。 在最底层,他提到你可以把这个放在你的创业中,以防止重新映射到遗留的要求

JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
JwtSecurityTokenHandler.DefaultOutboundClaimTypeMap.Clear();

希望这能让你明白。


2
投票

也有这个选项,在 ConfigureServices() 关于 Startup.cs:

JwtSecurityTokenHandler.DefaultMapInboundClaims = false;

这个标志可以防止映射,所以你的索赔名称不会改变。

© www.soinside.com 2019 - 2024. All rights reserved.