单点登录(Single Sign-On,简称SSO)是一种集中式的身份验证和授权机制,用户只需在一处输入一次凭证(例如用户名和密码)就可以访问多个相关但独立的软件系统。
单点登录的核心是身份提供者(Identity Provider,简称IdP)和服务提供者(Service Provider,简称SP)。按照不同的技术手段和实现机制,单点登录的方法主要有以下几类:
-
基于父域Cookie:适用于同一个主域名下的多个子域名。通过在主域名设置共享的Cookie,实现跨子域名的单点登录。优点是实现简单,无需额外的认证服务器;缺点是只能在同一主域名下使用,跨域名无法使用。
-
基于认证中心:通过独立的认证服务器(认证中心)管理用户的身份验证。优点是支持跨域名的单点登录,安全性高,集中管理用户认证逻辑;缺点是实现复杂,需要维护独立的认证中心。典型框架有CAS(Central Authentication Service)、OAuth2、SAML(Security Assertion Markup Language)等。
-
基于令牌(Token):通过使用令牌(如JWT)进行身份验证和授权。优点是无需依赖Cookie,适用于移动应用和SPA(单页面应用),跨域名支持良好;缺点是令牌的安全存储和管理需要特别注意。
-
基于浏览器的LocalStorage和跨域消息传递:利用浏览器的LocalStorage和跨域消息传递(Cross-Origin Messaging)实现单点登录。优点是可以实现跨域名的单点登录,无需依赖Cookie;缺点是安全性较低,LocalStorage中的数据容易被恶意脚本访问,实现较为复杂。
-
基于反向代理(https://baike.baidu.com/item/%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86):使用反向代理服务器统一处理用户认证,代理服务器在后端各个应用之间共享用户身份信息。优点是可以集中管理认证逻辑和安全策略,跨应用实现简单;缺点是依赖代理服务器的性能和可靠性。
综上所述,单点登录是一种方便用户访问多个系统的身份验证机制,其多种实现方式各有优缺点,可根据具体需求和应用环境选择合适的方案。