【问题标题】:OpenId/AzureAd - wrong value in HttpContext.User.Identity.Name in .net core 6OpenId/AzureAd - .net core 6 中 HttpContext.User.Identity.Name 中的值错误
【发布时间】:2022-01-24 01:59:09
【问题描述】:

我们的项目使用 Azure AD 对用户进行身份验证。

从 .net core 3 迁移到 .net core 6 后,我们开始两次使用类型“http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name”获取声明。您可以在下面的屏幕截图中看到这一点。一个基本上是用户的全名(John Doe),另一个是我们需要的电子邮件地址。

这会破坏我们的身份验证代码,因为我们使用HttpContext.User.Identity.Name 在我们的数据库中查找用户。该属性从上述类型的声明中获取.Name 的值。

在 .net core 3 下,我们得到了这两个声明,但全名有一个简单的类型“名称”和一个带有电子邮件地址的类型 -“http://schemas.xmlsoap.org/ws/2005/05/identity /声明/名称”。效果很好。现在,由于我们两次收到相同的声明类型 - 第一个被填充为 .Name,这是全名,而不是我们想要的电子邮件地址。

我已经有了一些解决方法。

其中一个正在更改.Name 属性的源声明类型:

options.TokenValidationParameters.NameClaimType = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn";

另一个,有一个实现IClaimsTransformation接口的简单类, 允许我删除/修复重复的声明类型并使其像以前一样工作。

但这两种解决方案都不理想。 UPN 不保证它与 /name 声明相同(并且我们有很多使用 ../name 值注册的用户),据我所知 - 它可能根本不可用。 第二种解决方案不可靠,因为很难区分全名和该电子邮件地址(有人可能会将 @ 放在用户的全名中,或者带有地址的字段可能会向我们发送不是电子邮件地址形式的东西)。

所以,问题是 - 什么可能导致这个问题?什么可以控制这个?我认为这与 .net 最近的变化有关,因为我们没有对 Azure AD 配置做任何事情。旧代码仍然可以正常工作。

【问题讨论】:

    标签: c# azure-active-directory openid-connect asp.net-core-6.0


    【解决方案1】:

    终于想通了。

    我们安装了Microsoft.AspNetCore.Authentication.OpenIdConnect Version="6.0.1"。这取决于System.IdentityModel.Tokens.Jwt Version="6.10.0"

    只需将 System.IdentityModel.Tokens.Jwt 更新到 6.10.2 或更高版本。这将解决问题。

    This commit 向 ClaimTypeMapping.cs 添加了新行,这是“名称”(JwtRegisteredClaimNames.Name) 声明类型的映射,我可以在旧版本的 .net 核心中看到。这会创建一个重复的“http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name”条目,因为 ClaimTypeMapping.cs aleady 已将“unique_name”(JwtRegisteredClaimNames.UniqueName)映射到“http://schemas” .xmlsoap.org/ws/2005/05/identity/claims/name”。

    已修复 this,它只是删除了该映射。

    如果无法升级 - 可以这样做:

    JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Remove(JwtRegisteredClaimNames.Name);
    

    应该在app.UseAuthentication(); 行之前。

    【讨论】:

      【解决方案2】:

      感谢您回复您自己的问题。在更新了一些直接依赖项后,我们的一款产品间接依赖于 System.IdentityModel.Tokens.Jwt 的 6.10.0 版本,我们也遇到了同样的问题。

      这真的让我们很困惑,为什么这个产品突然出现登录问题。您的解决方案帮助我们朝着正确的方向前进! :)

      【讨论】:

        猜你喜欢
        • 2019-08-04
        • 2021-11-01
        • 2018-12-12
        • 2022-09-30
        • 2022-11-17
        • 1970-01-01
        • 2019-02-06
        • 2020-05-15
        • 1970-01-01
        相关资源
        最近更新 更多