ADFS/SAML Java 桌面应用的身份验证

ADFS/SAML authentication for Java desktop app

我有一个 Java 桌面应用程序。我发现很多在线资源都在讨论 Web 应用程序的 SSO 身份验证。对于老式桌面应用程序,我需要同样的东西。基本上,我需要该应用程序打开浏览器 window,让用户针对 ADFS 进行身份验证,然后取回令牌。

如何使用 ADFS/SAML 添加 SSO 身份验证?

桌面应用程序。没有浏览器。

WS-Fed 和 SAML 是围绕浏览器重定向构建的。

为什么需要 SAML? OpenID Connect / OAuth 怎么样?

如果这是一个选项,请查看 ADAL Java 示例 - Azure Active Directory Authentication Libraries。 ADFS 中的 OAuth 支持有限。 V3.0

您的另一种选择是使用主动配置文件(网络服务)而不是被动配置文件(浏览器)。

但那是 WS-Trust 而不是 SAML。

我找到了答案。

  1. 首先,桌面应用程序需要显示浏览器 window。这可以使用 JavaFX WebView 轻松实现。我已经使用 JavaFX WebView 成功测试了 Google 和 ADFS 登录。注意:如果您使用 ADFS,则必须将 ADFS 设置为使用基于表单的身份验证。
  2. 需要构建一个辅助网络服务。 Web 服务将提供一种由任何联合身份验证机制(SAML2、OAuth 等)保护的方法。我无法在 Java 中执行此操作。有一些像 JOSSO 这样的解决方案,但它们非常麻烦或严重缺乏。但是,C# 对联合身份验证具有出色的支持,这使其成为完成此任务的绝佳选择。
  3. 当用户需要进行身份验证时,桌面应用程序显示浏览器 window 自动调用上述方法。联邦身份验证握手后,浏览器将能够访问该方法。此方法告诉桌面应用程序是否允许调用用户访问。
  4. 最后一步是关闭浏览器window并登录用户。

注意:这不是一件容易的事。将所有内容放在一起大约需要一周的时间。