首页 > 解决方案 > 使用 WindowsIdentity/WindowsPrincipal 获取 WS-Federation 的 SAML 令牌

问题描述

有没有办法在企业域上运行的 C# 应用程序中使用本机 WindowsIdentity/WindowsPrincipal 以便能够从域的 ADFS 服务器请求 SAML 令牌,以便 C# 应用程序随后可以对 WS-Federation 调用进行后续调用已与 ADFS 服务器联合的服务提供商?

似乎我们会使用 WIF 联系 ADFS 服务器以获取令牌。有没有办法向 WIF 提供 Kerberos 票证,而不是使用用户名/密码?

查看 WindowsIdentity.GetCurrent() 我可以看到用户使用 kerberos 登录,但看不到如何配置对 ADFS 的 WIF 调用以使用 kerberos 自动获取 SAML 令牌而无需用户名/密码凭据集。

标签: c#kerberosadfswifws-federation

解决方案


https://blogs.msdn.microsoft.com/alikl/2011/09/30/how-to-use-ad-fs-endpoints-when-developing-claims-aware-wcf-services-using-wif/有帮助吗?

您应该确保您启用了一个端点,该端点可以通过启用 kerberos 进行 Windows 集成身份验证。类似 /adfs/services/trust/2005/windowstransport 或 /adfs/services/trust/13/windowstransport 的东西。您可以通过解析 /adfs/services/trust/mex 端点来检查。系统管理员有时会禁用其中一些端点。

使用 kerberos 票证作为端点的凭据意味着您的应用程序需要在 corpnet 上运行,并且可以访问域控制器,以便它可以获得 AD FS 的票证。如果在公司网络之外不需要使用该应用程序,这对您来说可能没问题。否则,您需要考虑应用程序在公司网络内外的行为/身份验证方式。

查看https://www.microsoft.com/en-gb/download/details.aspx?id=4451以获取示例,但它们需要根据您计划使用的 WIF 版本进行修改,如https://www.microsoft.com/en-gb/download/details.aspx?id=4451 /docs.microsoft.com/en-us/dotnet/framework/security/guidelines-for-migrating-an-application-built-using-wif-3-5-to-wif-4-5

最后,您应该考虑是否可以在您的场景中使用 OpenID Connect 和 OAuth2.0 而不是 WS-Federation/WS-Trust。如果是,您应该查看https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/overview/ad-fs-scenarios-for-developers上的信息


推荐阅读