SSO单点登录

一、SSO(单点登录)原理

SSO 是一种认证模式,允许用户只需一次登录,即可访问多个互信系统,无需再次登录。

1. 基本原理

  • 用户访问受保护的系统(应用 A)。
  • 应用 A 检查用户是否已登录,若未登录,跳转到认证中心(Identity Provider, IdP)。
  • 用户在 IdP 中完成认证后,IdP 生成一个令牌或票据,返回给应用 A。
  • 应用 A 验证令牌后,允许用户访问。
  • 其他应用(如应用 B)收到用户访问时,可基于该令牌快速完成登录。

2. 核心流程

  • 身份验证:认证中心负责验证用户身份。
  • 票据管理:使用票据或令牌在多系统之间传递身份。
  • 信任机制:不同系统之间通过共享公钥、密钥或第三方 IdP 形成信任关系。

二、SSO 常用协议

以下是几种常用协议及其特点:

1. OAuth 2.0

  • 用于授权,支持第三方应用访问资源。
  • 用户授权后,获取 access_token,然后通过此令牌访问资源。

2. OpenID Connect (OIDC)

  • 基于 OAuth 2.0 的身份认证协议。
  • 在 OAuth 的基础上增加 id_token,用于用户身份信息传递。

3. SAML(Security Assertion Markup Language)

  • 基于 XML 的协议,广泛应用于企业和跨域认证场景。
  • 通过 SAML 断言在 IdP 和 SP(Service Provider)之间传递用户身份。

4. CAS(Central Authentication Service)

  • 一个开源的 SSO 协议,提供中心化认证服务。
  • 简单易用,但较少支持现代化需求。

三、常用工具和平台

  1. 开源工具

    • Keycloak:支持 OIDC 、OAuth 和 SAML,易于集成,适用于多种场景。
    • Shibboleth:基于 SAML,专注于教育机构。
    • Auth0:支持多种协议,功能强大但部分功能收费。
    • CAS Server:简单轻量的开源 SSO 实现。
  2. 企业级工具

    • Okta:商业化平台,提供丰富的企业级功能。
    • Azure AD:微软的企业身份管理服务,支持 SSO。
    • Ping Identity:专注于企业级身份认证和 SSO。
    • 阿里云/腾讯云 IAM:国内云厂商提供的 SSO 服务。

四、企业级多系统对接实现

1. 对接模式

  • 通过 IdP:所有系统接入一个统一的 IdP(如 Keycloak、Azure AD)。
  • Token 验证:系统通过共享 Token 验证用户身份。
  • 代理模式:通过反向代理或 API Gateway,实现认证代理。

2. 步骤

  1. 统一认证中心:搭建 IdP,配置 SSO 协议(OAuth、OIDC、SAML)。
  2. 接入系统:在各系统中实现对认证中心的集成(如配置 SAML 或 OIDC 客户端)。
  3. Token 传递:通过浏览器 Cookie、JWT、Session 或 URL 参数在系统间传递身份信息。
  4. 权限管理:结合 RBAC/ABAC 模型进行细粒度授权。

3. 配置域名

  • 统一域名管理:使用统一的二级域名(如 sso.company.com)作为认证入口。
  • 跨域支持:在 Cookie 设置中启用跨域共享(SameSite=NoneSecure)。
  • DNS 配置:通过企业 DNS 将各系统指向相应服务(如 app1.company.comapp2.company.com)。
  • HTTPS:确保所有通信通过 HTTPS 进行,防止中间人攻击。

五、示例配置

Keycloak 为例:

  1. 安装 Keycloak
docker run -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:latest start-dev
  1. 创建 Realm 和客户端

    • 创建一个 company-realm,并配置对应的客户端应用(如 app1app2)。
  2. 配置客户端

    • 在应用中集成 OIDC 客户端库(如 spring-security-oauth2oidc-client.js)。
    • 设置回调 URL,如 https://app1.company.com/callback
  3. 设置域名

    • 配置 DNS 指向和 nginx 路由规则,将 app1.company.com 指向相应服务。

通过上述方法,企业可以构建一个高效、安全的 SSO 体系,实现多系统统一认证和快速切换。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容