收藏!实现单点登录的四种技术方式

收藏!实现单点登录的四种技术方式一 什么是单点登录单点登录 Single Sign On SSO 是一种让用户在多个应用系统之间只需登录一次就可以访问所有授权系统的机制 单点登录主要目的是为了提高用户体验并简化安全管理

大家好,欢迎来到IT知识分享网。

一、什么是单点登录

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

收藏!实现单点登录的四种技术方式

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

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

二、实现方式

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

1.基于Cookie

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

收藏!实现单点登录的四种技术方式

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

流程如下:

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

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

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

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

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

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

简单易用:Cookie是Web开发中常用的机制,开发人员对其有深入的了解和使用经验,因此实现起来相对简单。

浏览器支持:浏览器会自动处理Cookie的存储和发送,用户无需额外操作,提高了用户体验。

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

跨站请求伪造(CSRF):攻击者可能利用用户的已登录状态,伪造用户的请求来执行恶意操作。为了防止CSRF攻击,开发者需要采取额外的安全措施,如使用令牌(Token)进行验证。

Cookie劫持:如果攻击者能够获取用户的Cookie,他们就可以伪装成用户进行登录和访问。因此,需要采取加密和其他安全措施来保护Cookie的安全性。

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

使用HTTPS:通过HTTPS协议来传输Cookie,确保其在网络传输过程中的安全性。

设置安全的Cookie属性:如设置HttpOnly属性,防止JavaScript访问Cookie;设置Secure属性,确保Cookie只能通过HTTPS传输。

定期更新和失效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)。

令牌类型( typ ) :这部分定义了令牌的类型,对于JWT来说,这个值通常是“JWT”。 签名算法( alg ) :这部分定义了用于签名和验证签名所使用的算法,如“HS256”,“RS256”,“ES256”等。

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

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

注册声明 :它们是一组预定义的声明,例如 iss (发行者)、 sub (主题)、 aud (受众)、 exp (过期时间)和 iat (签发时间)等。

公共声明 :这些声明可以由使用JWT的人任意定义,但为了避免冲突,它们应该在IANA JSON Web Token Registry中进行注册。

私有声明 :是自定义的声明,通常在发送者和接收者之间共享信息。

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

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

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

在基于JWT的单点登录中,用户只需在初始登录时提供凭证,如用户名和密码,验证成功后,服务器会生成一个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)的一个库或工具。

轻量级且功能强大:Java-JWT库允许开发者轻松创建、解析和验证JWT。

多种哈希算法支持:支持包括HMAC与RSA家族的HS256到HS512以及RS256到RS512,还有ECDSA系列等多种哈希算法,满足不同安全级别和性能需求。

易于集成:通过Maven或Gradle即可添加依赖,让开发者迅速集成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 存储时单点登录的一个基本流程:

用户访问系统 A 的登录页面。

用户提供登录凭证(用户名和密码),系统 A 验证这些凭证。

验证成功,系统 A 生成一个唯一的会话标识(session ID),并将这个标识存储在 Redis 中,与用户信息关联。

系统 A 将会话标识作为 cookie 存储在用户的浏览器中。

用户访问系统 B,携带 cookie。

系统 B 检查 cookie 中的会话标识。

系统 B 使用会话标识去 Redis 查询用户的会话信息。

找到了会话信息,系统 B 确认用户已登录,并允许访问。

基于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断言使用XML签名和加密技术来保护信息的安全性和完整性,防止了中间人攻击和数据泄露等风险。

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

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

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

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

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

三、方式对比

基于Cookie

基于JWT

基于Session

基于SAML

安全性

存储在浏览器,容易被篡改,安全性较低

通过数字签名保证数据完整性和真实性,安全性较高

存储在服务器端,安全性较高

使用XML加密和签名机制,安全性较高

复杂性

实现相对简单

实现相对简单,但需要注意安全性

实现相对复杂,需要服务器资源

实现相对复杂

适用场景

适用于简单的会话管理,但不推荐用于存储敏感信息或进行复杂的身份验证

适用于分布式系统、微服务架构和跨域身份验证

适用于需要服务器端状态管理的应用,如大型网站或应用

适用于企业间的单点登录和跨域身份认证,常用于大型企业和云服务提供商

可扩展性

不支持跨域

支持跨域

支持跨域

支持复杂的跨域和联合身份验证

开源实现

Java-JWT和JJWT

OpenSAML

四、实际应用

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

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平台实现了对多个厂家不同设备的集中管理控制,减少了用户在多个应用之间的切换和登录操作,避免用户记录多个设备的账号密码,大大提高了用户的运维管理效率和安全性。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/180684.html

(0)
上一篇 2025-06-12 08:26
下一篇 2025-06-12 08:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信