本地主机和应用服务之间 Azure AD 令牌中的声明之间的差异

Difference between the claims in Azure AD tokens between localhost and App Service

提问人:Marty 提问时间:11/13/2023 最后编辑:Marty 更新时间:11/14/2023 访问量:52

问:

我正在开发一个供内部组织使用的 Blazor Server 应用。这包括具有 Azure AD 的 Azure 租户、托管在 Azure 应用服务上的应用、应用注册...我不会说什么特别的。

我正在从 Azure ID 获取用于身份验证和授权的标识令牌。

在“应用注册”下,我添加了 和 的可选声明。Manage->Token configurationfamily_namegiven_name

使用如下代码在localhost上进行测试时,我可以读取它们:

user.FindFirst(ClaimTypes.GivenName)?.Value;
// ClaimTypes.GivenName is shorthand for:
// "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname"

在 Azure 应用服务上部署时,此代码返回 。必须通过以下方式访问预期值:null

user.FindFirst("given_name")?.Value;

这在本地主机上不起作用...

我还注意到,索赔名称之间甚至索赔数量之间存在进一步的差异。

我希望声明标识符的名称相同,并且完全不明白为什么会有差异。

有人可以详细说明一下吗?

谢谢

Edit:

我得到了一切正常的令牌,但是当列出货币对时,我得到了这个:key, valueuser.Claims

localhost:
(key: value)
[...]
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname": "Marty",
"http://schemas.microsoft.com/ws/2008/06/identity/claims/role": "Admin",
[...]

App Service:
[...]
"given_name": "Marty",
"roles": "Admin",
[...]

基本上,在 C# 类中定义并使用长格式的所有 ClaimType 在部署时都会替换为较短的名称,而 localhost 应用则使用较长的名称获取它们。ClaimTypes.[...]hhtp://schemas.microsoft...

azure-active-directory azure-web-app-service 令牌

评论

0赞 Nick.Mc 11/13/2023
在失败的情况下,它有什么?用户对象是空的还是缺少属性?useruser
0赞 Marty 11/13/2023
它们是“相同的”(在某种程度上),只是许多(如果不是全部)声明的部分不同key
0赞 Nick.Mc 11/13/2023
因此,应用服务似乎返回的声称类型没有正确的键值。根据此处,应用服务与本地版本之间可能存在库版本不匹配 stackoverflow.com/a/70456703/1690193
0赞 Marty 11/14/2023
我不认为它适用;提到的库目前有几个版本更高。我以(以前)的方式部署了应用程序,但没有任何变化。在阅读您提到的项目后,我确实注意到了:在列出声明时,我在已部署的应用程序上看到一个,但在 localhost 上没有等效的声明。self-containedframework-dependent"ver":"2.0"
1赞 Marty 11/14/2023
是的,这个模式转换层是我可以探索的东西。对于您的第 1 点:在将应用程序部署为(即框架和所有依赖项都与应用程序捆绑在一起 - afaik)时,这应该得到缓解。另一方面,声明列表并不相同:不同,甚至有些值具有相同的键,例如 (我假设的应用程序 ID)是不同的。在我看来,似乎还有其他事情在起作用。self-containedcountaid

答: 暂无答案