1

我按照本页中概述的步骤构建了一个声明感知 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 上的依赖方信任)。此实用程序将大量标记插入到引用 Microsoft.IdentityModel 命名空间的 web.config 中。

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

我所遵循的示例没有提到 Windows 身份联合实用程序。我需要使用它吗?或者没有它会起作用吗?

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

4

2 回答 2

1

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

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

于 2018-05-21T18:33:36.553 回答
1

请注意,更“现代的方式”是使用OWIN WS-Federation库。

此示例适用于 Azure AD,但您只需指向元数据,代码自行计算其余所有内容。

于 2018-06-06T19:30:06.763 回答