您好,欢迎访问本站博客!登录后台查看权限
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧
  • 网站所有资源均来自网络,如有侵权请联系站长删除!

技术干货:手把手教你搞定单点登录!

CF排位号 admin 2025-10-25 22:02 16 次浏览 0个评论
网站分享代码

一、什么是单点登录

单点登录(Single Sign-On, SSO)是一种让用户在多个应用系统之间只需登录一次就可以访问所有授权系统的机制。单点登录主要目的是为了提高用户体验并简化安全管理。

单点登录是一种身份认证机制,它允许用户只需在多个应用程序之间进行一次登录,即可访问所有相互信任的应用程序,而无需再次输入用户名和密码。其原理在于,通过一个独立的认证中心来集中管理用户的身份信息和授权信息。当用户在一个应用上完成登录后,认证中心会生成一个令牌,该令牌包含了用户的身份信息和授权信息。当用户访问其他应用时,只需携带这个令牌,应用就可以通过认证中心验证令牌的有效性,从而实现用户的快速登录。

单点登录的优势显而易见。首先,它极大地简化了登录流程,减少了用户在多个应用之间的切换和登录操作,提高了用户的使用效率。其次,单点登录提高了安全性。由于用户的密码等敏感信息只在认证中心进行验证和存储,其他应用无法获取这些信息,从而降低了用户信息泄露的风险。此外,单点登录还有助于统一用户管理,方便企业进行用户权限的集中控制和审计。

二、实现方式

实现单点登录的方式有多种,下面介绍几种常见的实现方式:

1.基于Cookie

基于Cookie的单点登录方式是一种常见的身份验证机制,它依赖于Cookie在多个应用之间共享用户的身份验证信息,从而实现用户只需登录一次即可访问多个应用的目的。以下是基于Cookie的单点登录方式的基本原理:

上图就是一个利用cookie做单点登录的原理图,案例为用户登录应用服务器A之后又登录应用服务器B。

流程如下:

第一步:用户输入用户名/密码登录到应用服务器A。

第二步:应用服务器A处理后将用户信息通过cookie的方式返回到浏览器。

第三步:用户访问应用服务器B,浏览器自动将用户信息携带到应用服务器B。

第四步:应用服务器B从cookie中获取用户信息登录,返回用户访问界面。

这样用户就只登录一次,就访问了两个应用服务器。

基于Cookie的单点登录方式具有以下优点:

然而,基于Cookie的单点登录方式也存在一些潜在的安全风险:

为了增强基于Cookie的单点登录的安全性,可以采取以下措施:

综上所述,基于Cookie的单点登录方式在提供便捷性的同时,也需要关注其潜在的安全风险,并采取相应的安全措施来保障用户的安全和隐私。

2.基于JWT

JSON Web Token(JWT)是一种开放标准(RFC 7519),用于在各方之间安全地传输信息。它通常被用来在网络应用环境间传递声明,如用户身份验证信息等。JWT的结构允许其轻松地在不同的系统之间传输,并且能被携带在URL的参数中,同时也支持在POST请求体中作为表单数据发送。

JWT基本结构:Header、Payload、Signature

Header的作用和组成 JWT的头部结构(Header)是JWT的第一部分,它通常由两部分组成:令牌类型(token type)和签名算法(signing algorithm)。

JWT的第二部分是载荷(Payload),它包含要传递的数据,例如声明(Claims)。

声明可以是注册声明(Registered Claims)、公共声明(Public Claims)或私有声明(Private Claims)。

JWT的第三部分签名的主要作用是保证令牌的完整性和来源的可信性。签名过程使用了Header和Payload的内容,以及一个密钥(Secret Key)或证书。

签名方法 :通常,我们可以使用对称加密算法(如HS256)或非对称加密算法(如RS256)进行签名。对称算法使用相同的密钥进行签名和验证,而非对称算法使用一对密钥,一个公钥用于签名,一个私钥用于验证。

基于JWT的单点登录方式是一种现代的身份验证和授权机制,它使用JWT作为在用户和服务器之间传递安全信息的媒介,从而实现单点登录的效果。

在基于JWT的单点登录中,用户只需在初始登录时提供凭证,如用户名和密码,验证成功后,服务器会生成一个JWT并返回给浏览器。浏览器在后续的请求中都会携带这个JWT,以证明用户的身份和授权信息。服务器会验证JWT的有效性,以决定是否允许用户访问相应的资源。

基于JWT的单点登录方式的原理如下图:

基于JWT的单点登录方式具有以下优点:

需要注意的是,在使用基于JWT的单点登录时,需要确保JWT的安全传输和存储,防止中间人攻击和数据泄露。同时,还需要合理设置JWT的过期时间,并定期更新或刷新JWT,以确保其有效性。

基于JWT的单点登录方式是一种高效、灵活且安全的身份验证和授权机制,适用于需要跨多个应用或服务进行单点登录的场景。

JWT的JAVA开源实现有多种,其中最常见的是Java-JWT和JJWT。

Java-JWT是指Java实现JSON Web Token(JWT)的一个库或工具。

JJWT是一个提供端到端的JWT创建和验证的Java库。永远免费和开源(Apache License,版本2.0),JJWT很容易使用和理解。它被设计成一个以建筑为中心的流畅界面,隐藏了它的大部分复杂性。

JJWT的目标是最容易使用和理解用于在JVM上创建和验证JSON Web令牌(JWTs)的库。

JJWT是基于JWT、JWS、JWE、JWK和JWA RFC规范的Java实现。

JJWT还添加了一些不属于规范的便利扩展,比如JWT压缩和索赔强制。

3.基于Session共享

基于session共享的单点登录实现方式,主要是将用户的认证信息保存在session中,以此作为用户访问不同应用系统的凭证。

主要是将Session会话信息保存到公共的平台,如Redis,数据库等,各应用系统共用一个会话状态sessionId,实现登录信息的共享,从而实现单点登录。

以下是使用 Redis 作为 session 存储时单点登录的一个基本流程:

基于Session解决了Cookie不能跨域的问题,但也存在其他问题。早期的单体应用使用Session实现单点登录,但现在大部分情况下都需要集群,由于存在多台服务器,Session在多台服务器之间是不共享的,可以把Session数据放在Redis中(使用Redis模拟Session)。

4.基于SAML

安全断言标记语言(英语:Security Assertion Markup Language,简称SAML)是一个基于XML的开源标准数据格式,它在当事方之间交换身份验证和授权数据,尤其是在身份提供者和服务提供者之间交换。

SAML定义了一种XML格式,用于在身份提供者(IDP)和服务提供者(SP)之间交换身份验证和授权信息。

在基于SAML的单点登录中,用户只需在身份提供者处进行一次登录,即可访问所有与身份提供者建立了信任关系的服务提供者。这种方式简化了用户的登录流程,提高了用户体验,并加强了系统的安全性。

基于SAML的单点登录方式的基本步骤如下:

基于SAML的单点登录方式具有以下优点:

需要注意的是,基于SAML的单点登录方式需要正确配置和管理身份提供者和服务提供者之间的信任关系。同时,还需要确保SAML断言的传输和存储安全,以防止未经授权的访问和篡改。

在实现基于SAML的单点登录时,可能需要使用特定的软件或中间件来支持SAML断言的生成、验证和传输。这些工具可以帮助开发人员简化SAML单点登录的实现过程,提高系统的安全性和可靠性。

基于SAML的单点登录方式是一种强大且灵活的身份验证和授权解决方案,适用于需要跨多个应用或服务进行单点登录的场景。

SAML的开源实现,最知名且广泛使用的是OpenSAML。

OpenSAML是一个Java库,用于处理SAML协议和SAML断言。它提供了解析、构造、签名和验证SAML消息所需的全部工具。

三、方式对比四、实际应用

上面章节介绍多种单点登录方式方法,下面给大家讲一讲单点登录技术的实际应用。

1.基于Session共享

威努特的自研产品很多,涉及防火墙、检测审计、主机卫士、日志审计等产品,态势分析与安全运营平台(SASOC)是融合多种业务于一体的业务平台,需要实现多种业务子系统的单点登录。我们在产品立项规划时做了整体设计,所有业务子系统都通过SASOC平台进行统一登录,登录后把身份认证信息存储在Redis中,其他业务子系统通过获取Redis中身份认证信息进行验证,验证通过直接登录成功。这种登录方式就是经典的基于Session共享的方案。

2.基于Cookie改进

在实际的工业现场环境中,一般包括多个厂商的多种不同类型的设备,比如下图:

这种场景中要实现单点登录方案,不能照搬上面章节介绍的典型方案,主要原因:

1)客户现场不同公司的产品也不可能全部定制开发适配新的认证中心;

2)账号、密码和权限控制是各家产品安全管理的核心内容,大家一般都不愿依靠第三方进行身份认证管理。

为了实现单点登录,需要对Cookie方案进行改进优化。目前大部分厂家的系统都对外提供单点登录的API接口,方便其他厂商登录跳转。因此,大部分场景中,使用SASOC作为统一登录与认证中心,调用其他厂商设备的API接口,实现单点登录功能,在多个系统之间可以免登录跳转,主要流程如下:

单点登录流程说明如下:

1. 用户登录SASOC,身份验证通过,进入已确认资产模块,通过IP地址找到待管理的其他系统设备。

2. 用户在资产页面点击单点登录按钮,SASOC携带身份信息访问其他系统设备,其他系统设备认证通过返回Token信息。

3. SASOC接收Token信息,前台页面携带Token访问其他系统设备的Web页面。

4. 其他系统设备验证Token,认证成功后,返回对应的Web界面。

5. SASOC展示该系统设备的业务管理页面。

按照以上方案完成单点登录,通过SASOC平台实现了对多个厂家不同设备的集中管理控制,减少了用户在多个应用之间的切换和登录操作,避免用户记录多个设备的账号密码,大大提高了用户的运维管理效率和安全性。