关于单点登录(Single Sign-On,SSO)

业务背景

在企业发展初期,企业使用的系统很少,通常一个或者两个,每个系统都有自己的登录模块,用户用不同的账号即可登录,很方便。 但随着企业的发展,用到的系统随之增多,用户在操作不同的系统时,需要多次登录,而且每个系统的账号都不一样,这对于用户来说,很不方便。于是,就想到是不是可以在一个系统登录,其他系统就不用登录了呢?这就是单点登录要解决的问题。

什么是 SSO?

单点登录(Single Sign-On, SSO)是一种用户认证机制,允许用户在一个地方登录后,能够访问多个相关但独立的软件系统,而无需在每个系统中重新登录。这种机制简化了用户的登录过程,提升了用户体验,同时也便于企业对用户身份的集中管理和安全控制。

SSO 的主要特点
  1. 一次登录,多处访问:
    ○ 用户只需进行一次身份验证,就可以访问多个应用程序或系统,无需重复输入用户名和密码。
  2. 集中管理:
    ○ SSO 允许企业集中管理用户的身份和权限,从而简化用户账户的管理,降低管理成本。
  3. 提升用户体验:
    ○ 减少了用户的登录次数,提高了用户的操作效率和满意度。
  4. 增强安全性:
    ○ 通过集中管理和统一的认证机制,可以更有效地实施安全策略和监控,减少了密码疲劳和密码泄露的风险。

SSO 有什么好处?

单点登录(SSO)为用户和组织提供了许多好处,从提高用户体验到增强安全性,具体好处如下:

对用户的好处
  1. 简化登录流程:
    ○ 用户只需一次登录即可访问多个应用程序,减少了重复输入用户名和密码的次数。
  2. 提高用户体验:
    ○ 简化的登录流程提升了用户对系统的满意度和使用效率。
  3. 减少密码疲劳:
    ○ 用户只需记住一个密码,降低了忘记密码的可能性,减少了重置密码的需求。
  4. 无缝切换:
    ○ 用户可以在不同的应用程序之间无缝切换,不需要每次都重新登录。
对组织的好处
  1. 集中管理:
    ○ 集中管理用户身份和访问权限,简化了用户账户的管理,提高了管理效率。
  2. 增强安全性:
    ○ 通过统一的认证机制和策略,可以更好地实施和监控安全策略,减少了弱密码和密码泄露的风险。
  3. 降低管理成本:
    ○ 减少了支持和管理多个认证系统的开销,降低了 IT 支持的工作量。
  4. 合规性:
    ○ 统一的认证和授权机制有助于企业满足各种法规和合规要求(如 GDPR、HIPAA 等)。
  5. 提高生产力:
    ○ 用户不需要频繁登录和记住多个凭证,可以更专注于实际工作,提升整体工作效率。
  6. 数据一致性:
    ○ 通过集中管理用户信息,可以确保各个系统中用户数据的一致性,减少数据冗余和错误。
技术和安全优势
  1. 统一的身份验证:
    ○ 通过使用标准的认证协议(如 OAuth、OpenID Connect、SAML),可以实现跨平台和跨组织的身份验证。
  2. 多因素认证(MFA)集成:
    ○ SSO 系统通常支持集成多因素认证,进一步增强了系统的安全性。
  3. 简化权限管理:
    ○ 通过 SSO,可以统一管理用户的访问权限,确保只有授权用户才能访问特定资源。
  4. 日志和监控:
    ○ 统一的认证机制使得日志记录和监控更加容易,帮助企业及时发现和应对安全威胁。
实际应用场景
  1. 企业内部系统整合:
    ○ 企业内部有多个业务系统,通过 SSO 实现统一访问,提高员工的工作效率和满意度。
  2. 跨组织合作:
    ○ 不同组织之间的合作需要访问共享的资源,通过 SSO 可以简化身份验证流程,提高协作效率。
  3. SaaS 和云服务:
    ○ 企业使用多个 SaaS 应用和云服务,通过 SSO 实现统一登录和管理,简化了用户的访问流程。

总的来说,SSO 通过简化登录流程、集中管理用户身份和访问权限、增强安全性和提高用户体验,成为现代企业和组织不可或缺的技术手段。

单点登录设计与实现

同域名下的单点登录

一个企业一般情况下只有一个域名,通过二级域名区分不同的系统。比如我们有个域名叫做:a.com,同时有两个业务系统分别为:app1.a.com 和 app2.a.com。我们要做单点登录(SSO),需要一个登录系统,叫做:sso.a.com。
我们只要在 sso.a.com 登录,app1.a.com 和 app2.a.com 就也登录了。通过上面的登陆认证机制,我们可以知道,在 sso.a.com 中登录了,其实是在 sso.a.com 的服务端的 session 中记录了登录状态,同时在浏览器端(Browser)的 sso.a.com 下写入了 Cookie。
那么我们怎么才能让 app1.a.com 和 app2.a.com 登录呢?这里有两个问题:

  • Cookie 是不能跨域的,我们 Cookie 的 domain 属性是 sso.a.com,在给 app1.a.com 和 app2.a.com 发送请求是带不上的。
  • sso、app1 和 app2 是不同的应用,它们的 session 存在自己的应用内,是不共享的。
  • 针对第一个问题,我们可以把 Cookie 的域设置为顶域,这样所有子域的系统都可以访问到顶域的 Cookie。
  • 针对第二个问题,我们可以把 Session 进行共享,共享的方法有很多,这里就不展开说了。

在这种情况下,同域名下的单点登录就实现了,但这并不是真正的单点登录。

不同域下的单点登录

当企业系统分布在不同的顶级域名下时,情况变得更加复杂。例如,假设企业除了拥有 app1.a.com 和 app2.a.com,还有一个合作伙伴系统位于 partner.b.com。此时,简单的 Cookie 顶域设置和 Session 共享不再适用,因为它们无法跨越不同的顶级域名。
为了解决跨域的单点登录问题,我们通常采用以下几种策略:

  1. 中介 Token 机制 步骤:
    a. 用户在 SSO 系统(sso.a.com)登录,认证成功后,SSO 系统生成一个全局唯一的 Token。
    b. SSO 系统将 Token 通过 URL 重定向的方式传给客户端,客户端再携带此 Token 访问目标系统(如 app1.a.com)。
    c. app1.a.com 接收到 Token 后,向 SSO 系统发起验证请求,确认 Token 的有效性(通常包含用户身份信息)。
    d. 验证通过后,app1.a.com 在本地存储(如 Cookie 或 LocalStorage)中保存该 Token,并标记用户为已登录状态。 优势:解耦了各个系统的登录状态,提高了安全性,支持跨域。
  2. OAuth / OpenID Connect
    概念:OAuth 2.0 和 OpenID Connect 是广泛采用的身份验证和授权标准,非常适合处理跨域的单点登录。通俗点说,就是外卖小哥进入小区,不需要刷门禁卡,而是打电话给你,你跟门卫叔叔说让外卖小哥进入小区里面。 流程:
    a. 用户在客户端应用请求登录时,被重定向到认证服务器(可能是 SSO 系统)。
    b. 用户在认证服务器完成身份验证,认证服务器返回一个授权码或 ID Token 给客户端。
    c. 客户端携带授权码向认证服务器请求访问令牌(Access Token)。
    d. 认证服务器验证后,发放 Access Token 给客户端。
    e. 客户端使用 Access Token 向资源服务器请求受保护资源,实现登录。 优点:标准化流程,安全可靠,广泛兼容,适用于不同组织和第三方应用之间的单点登录。
  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值