c# - 使用 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 令牌而无需用户名/密码凭据集。
解决方案
您应该确保您启用了一个端点,该端点可以通过启用 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上的信息
推荐阅读
- flutter - 如何在颤动中创建水平列表
- mysql - 如何修复 #1366 - 不正确的字符串值:'\xE6\x10\x00\x00\x01\x01...'
- .net-core - Prism 可以使用 .NET Core 的内置依赖注入吗?
- python - importlib.import_module 忽略在 __init__.py 中进行的重新导出
- macos-catalina - 如何在 macOS Catalina 上安装 gmp4
- html - extends - 如何忽略父级上的子级 CSS
- javascript - Giphy 无法在 Discord 机器人上运行(javascript)
- ios - iOS ARKit setWorldOrigin 没有效果
- azure - 如何阻止 Azure CDN 缓存 index.html
- git - 非常慢的 git rev-parse