首页 > 解决方案 > 通过 ISecurityTokenValidator.ValidateToken 获得的 ClaimsPrincipal 正在更改 SCP 声明的名称

问题描述

我目前正在使用 Azure Active Directory 访问令牌和 .NET Core 3.1。我请求的访问令牌产生以下声明:

{
...
"scp": "MyScope.Create MyScope.Search"
...
}

但是,在运行访问令牌验证后,声明“scp”的名称更改为“ http://schemas.microsoft.com/identity/claims/scope

SecurityToken securityToken;
ClaimsPrincipal claimsPrincipal = tokenValidator.ValidateToken(accessToken, myValidationParameters, out securityToken);
return claimsPrincipal;

此外,正如您在图片中看到的那样,并非所有声明都已更改,有些声明保持不变,如 aud 或 iss,但 scp 更改为“ http://schemas.microsoft ...”(就像这是 v1令牌,但它是 v2)

这是预期的事情,还是我应该配置一些东西,以便声明保持应有的状态。

验证后的索赔

谢谢!

标签: c#access-tokenmsal.net-core-3.1

解决方案


ConfigureServices()Startup.cs中还可以设置此选项:

JwtSecurityTokenHandler.DefaultMapInboundClaims = false;

此标志阻止映射,因此您的声明名称不会更改。


推荐阅读