1. 概述
拥有多个应用的组织常常需要在多个系统间进行身份验证。因此,用户必须记住多个账户和密码。单点登录(Single Sign-On,简称SSO)技术就是为了解决这个问题。SSO为一组系统提供了一个单一的登录凭证。
在这篇教程中,我们将简要解释SSO是什么,然后介绍七个不同的Java应用程序SSO解决方案。
2. 单点登录
实现SSO解决方案可以使用以下两种协议之一:
- SAML 2.0
- OpenID Connect
SAML 2.0(安全断言标记语言)简化了用户身份验证。它允许用户仅在身份提供者处注册并验证,即可访问多个服务。它是基于XML的。OpenID Connect(OIDC)是SAML 2.0的后续版本,也是用于身份验证的OAuth 2.0协议的扩展。相比SAML 2.0,OIDC的配置更为简单。
3. Keycloak
Keycloak是一个开源的身份管理和访问管理(IAM)系统。它提供了SSO、用户联邦、细粒度授权、社交登录、双因素认证(2FA)等功能。此外,它支持OpenID Connect、OAuth 2.0和SAML。Keycloak与第三方工具的良好集成,例如与Spring Boot应用程序的集成非常顺畅。最新版本可以在这里找到。此外,它还为管理员和开发者提供了一个友好的管理控制台,用于配置和管理Keycloak。源代码可在GitHub上获取。
4. WSO2身份服务器
WSO2身份服务器是由WSO2开发的开源IAM系统。它提供SSO、2FA、身份联邦、社交登录等功能,并支持几乎所有的流行身份标准。此外,它还提供了管理控制台,并对外暴露API以与其他应用程序集成。然而,它主要用Java编写,源代码可在GitHub上查看。
5. Gluu
Gluu是一个基于云的开源IAM解决方案,具有丰富的访问管理功能。它提供强认证、移动认证、2FA以及身份代理等。此外,它还支持OpenID Connect、SAML 2.0、FIDO和用户自主访问等开放网络标准。Gluu使用Python语言编写。并且,Gluu服务器的部署和配置自动化脚本可在GitHub上获取。
6. Apereo CAS
Apereo CAS是一个开源的企业级SSO系统,也是中央认证服务(CAS)项目的一部分。类似于前面的解决方案,它支持SAML、OAuth 2.0、OpenID Connect等多种协议。此外,它还可以与uPortal、BlueSocket、TikiWiki、Mule、Liferay、Moodle等其他应用集成。它基于Spring Boot和Spring Cloud构建。源代码可在GitHub上找到。
7. Spring Security OAuth2
我们可以使用Spring Security OAuth项目来实现SSO解决方案。它支持OAuth提供者和OAuth消费者。此外,我们还可以通过软令牌和Spring Security实现2FA功能。
8. OpenAM
OpenAM是一个开放的访问管理解决方案,包括身份验证、授权、单点登录和身份提供商服务。它支持跨域单点登录(CDSSO)、SAML 2.0、OAuth 2.0和OpenID Connect。您可以在此处找到最新版本和源代码:这里。
9. Authelia
Authelia是一个开源的身份验证和授权服务器,提供SSO和2FA功能。它利用FIDO2和WebAuthn兼容的安全密钥提供基于硬件的2FA。此外,它还支持Google Authenticator等应用程序生成的基于时间的一次性密码。Authelia服务器使用Go语言编写,所有源代码可在GitHub上获取。
10. 总结
如今,许多组织都在使用SSO。本文从高层次概述了Java生态系统的SSO解决方案。其中一些解决方案提供了完整的IAM服务,而其他则仅提供SSO服务器和身份验证方法。