ASP.Net 5 Azure 身份验证 - 声明似乎已更改
ASP.Net 5 authentication with Azure - claims seemed to have changed
简要
在使用 Azure ADFS 进行身份验证时,我应该使用 OpenIdConnectDefaults.AuthenticationScheme
吗?
更详细
我有一个 ASP.NET 核心应用程序,最近已从 3.1 升级到 .NET 5。
之前,它一直使用以下 NuGet 包:
<PackageReference Include="Microsoft.AspNetCore.Authentication.AzureAD.UI" Version="3.1.9" />
以及我的 StartUp.cs
中的以下内容:
services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
.AddAzureAD(options => this.Configuration.Bind("AzureAd", options));
今天,我更新了 NuGet 包:
<PackageReference Include="Microsoft.AspNetCore.Authentication.AzureAD.UI" Version="5.0.3" />
并立即收到我正在使用 deprecated/obsolete 代码的警告。
我被定向到 Microsoft Identity Web 页面以获取更多信息....似乎要搜索很多东西才能找到我想要的东西。
虽然我确实读到 Visual Studio 预览版有一个更新的项目模板,所以我创建了一个新项目并将其连接到 Azure,并使用我的域凭据登录。太棒了!
它使用的相关 NuGet 包似乎是:
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="5.0.3" NoWarn="NU1605" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="5.0.3" NoWarn="NU1605" /
<PackageReference Include="Microsoft.Identity.Web" Version="1.1.0" />
<PackageReference Include="Microsoft.Identity.Web.UI" Version="1.1.0" />
所以,身份验证完成。现在进入授权......
所以我们有自己的本土授权服务。我们将用户的身份(从 ADFS)发送给它,它 returns 他们被允许做什么。这就是事情破裂的地方....
我们的原始代码使用了 Azure ADFS 响应中的“Upn”声明:
Claim? upnClaim = identity.FindFirst(ClaimTypes.Upn);
此 returns 电子邮件地址声明。
然而,这现在返回 null。
以下代码确实获得了电子邮件地址的声明:
Claim? upnClaim = identity.FindFirst("preferred_username");
所以,我可以 运行 用这个,它会工作......
但是,我想知道使用 OpenIdConnectDefaults.AuthenticationScheme
是否是最新 Microsoft Identity 和 Azure ADFS 的首选选项?我不得不使用魔术字符串“preferred_username”而不是 ClaimTypes.Upn
的事实让我有些怀疑。
有没有人对此有深入的了解?
The fact that I'm having to use a magic string "preferred_username" rather than ClaimTypes.Upn gives me some doubt.
preferred_username
不是魔术字符串,它被记录为 AAD 添加到 id 令牌有效负载的声明之一,请参阅 https://docs.microsoft.com/azure/active-directory/develop/id-tokens#payload-claims。
ASP.NET Core OpenID Connect 提供程序使用的基础库用于映射声明以匹配 .NET 世界中众所周知的声明。也许 Microsoft.Identity.Web 禁用该特定行为。
我不久前在 https://mderriey.com/2019/06/23/where-are-my-jwt-claims/ 上写过这篇博客。
简要
在使用 Azure ADFS 进行身份验证时,我应该使用 OpenIdConnectDefaults.AuthenticationScheme
吗?
更详细
我有一个 ASP.NET 核心应用程序,最近已从 3.1 升级到 .NET 5。
之前,它一直使用以下 NuGet 包:
<PackageReference Include="Microsoft.AspNetCore.Authentication.AzureAD.UI" Version="3.1.9" />
以及我的 StartUp.cs
中的以下内容:
services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
.AddAzureAD(options => this.Configuration.Bind("AzureAd", options));
今天,我更新了 NuGet 包:
<PackageReference Include="Microsoft.AspNetCore.Authentication.AzureAD.UI" Version="5.0.3" />
并立即收到我正在使用 deprecated/obsolete 代码的警告。
我被定向到 Microsoft Identity Web 页面以获取更多信息....似乎要搜索很多东西才能找到我想要的东西。
虽然我确实读到 Visual Studio 预览版有一个更新的项目模板,所以我创建了一个新项目并将其连接到 Azure,并使用我的域凭据登录。太棒了!
它使用的相关 NuGet 包似乎是:
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="5.0.3" NoWarn="NU1605" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="5.0.3" NoWarn="NU1605" /
<PackageReference Include="Microsoft.Identity.Web" Version="1.1.0" />
<PackageReference Include="Microsoft.Identity.Web.UI" Version="1.1.0" />
所以,身份验证完成。现在进入授权......
所以我们有自己的本土授权服务。我们将用户的身份(从 ADFS)发送给它,它 returns 他们被允许做什么。这就是事情破裂的地方....
我们的原始代码使用了 Azure ADFS 响应中的“Upn”声明:
Claim? upnClaim = identity.FindFirst(ClaimTypes.Upn);
此 returns 电子邮件地址声明。
然而,这现在返回 null。
以下代码确实获得了电子邮件地址的声明:
Claim? upnClaim = identity.FindFirst("preferred_username");
所以,我可以 运行 用这个,它会工作......
但是,我想知道使用 OpenIdConnectDefaults.AuthenticationScheme
是否是最新 Microsoft Identity 和 Azure ADFS 的首选选项?我不得不使用魔术字符串“preferred_username”而不是 ClaimTypes.Upn
的事实让我有些怀疑。
有没有人对此有深入的了解?
The fact that I'm having to use a magic string "preferred_username" rather than ClaimTypes.Upn gives me some doubt.
preferred_username
不是魔术字符串,它被记录为 AAD 添加到 id 令牌有效负载的声明之一,请参阅 https://docs.microsoft.com/azure/active-directory/develop/id-tokens#payload-claims。
ASP.NET Core OpenID Connect 提供程序使用的基础库用于映射声明以匹配 .NET 世界中众所周知的声明。也许 Microsoft.Identity.Web 禁用该特定行为。
我不久前在 https://mderriey.com/2019/06/23/where-are-my-jwt-claims/ 上写过这篇博客。