我是否需要使用 Windows 联合身份验证实用程序来创建声明感知 asp.net Web 应用程序?

Do I need to use the Windows Identity Federation Utility to create a claims-aware asp.net web application?

我按照本页概述的步骤构建了一个声明感知 asp.net mvc 应用程序:https://docs.microsoft.com/en-us/dotnet/framework/security/how-to-build-claims-aware-aspnet-mvc-web-app-using-wif。页面中的示例使用本地主机上的 STS,但在我的应用程序中,我指向不同服务器上功能齐全的 AD FS。

我正在使用 Framework 4.7 和 Windows Server 2016 来托管 AD FS 和 Web 应用程序。

部署应用程序后,我 运行 针对它的 Windows 联合身份验证实用程序(因为我认为我需要它来将应用程序添加为 AD FS 上的依赖方信任)。此实用程序将大量标记插入到 web.config 中,这些标记引用 Microsoft.IdentityModel 命名空间。

然后我将该应用程序作为依赖方信任添加到 AD FS,并导航到声明感知应用程序。页面失败,因为示例代码将 STS 返回的声明转换为 System.Security.Claims.Claim。当我将其更改为 Microsoft.IdentityModel.Claims.Claim 时,效果很好。

我所遵循的示例没有提及 Windows 联合身份验证实用程序。我需要用那个吗?或者如果没有它,这会起作用吗?

当我尝试撤消 web.config 更改时,实用程序插入站点失败并出现 401 错误(由于凭据无效而拒绝访问),因此显然需要实用程序插入的内容才能从 AD 获得身份验证FS。这是因为我 运行 网站上的实用程序在将其作为依赖方信任添加到 ADFS 之前吗?

这里的答案是:如果您使用的是 ADFS Server 2016,请不要 运行 Windows 联合身份验证实用程序,因为它会强制使用 Microsoft.Identity 库,这些库是已弃用。我错误地认为创建 FederationMetadata.xml 文件需要此实用程序。

我手动创建了 FederationMetadata.xml 文件,并将我的 web.config 恢复到使用 运行 实用程序之前的状态。这让我重新使用添加到 4.5 框架的 System.Identity 库,而不是现在已弃用的 Microsoft.Identity 库。

只是要注意,更多的"modern way"是使用OWIN WS-Federation

此示例适用于 Azure AD,但您只需指向元数据,代码会自行解决所有其他问题。