单点登录

简介: # 什么是单点登录**单点登录** 多系统,单一位置登录,实现多系统同时登录的一种技术**三方登录** 某系统使用其他系统的用户,实现本系统登录的方式,比如使用微信登录就是使用第三方登录 。

什么是单点登录

单点登录

多系统,单一位置登录,实现多系统同时登录的一种技术

三方登录

某系统使用其他系统的用户,实现本系统登录的方式,比如使用微信登录就是使用第三方登录 。

跨域

跨域是指浏览器不能直接访问其他域名下的资源,包括不同协议、不同端口、不同域名等。这是由于浏览器的同源策略所

如何解决跨域

  1. JSONP:通过动态创建
  2. CORS:即跨域资源共享,是一种官方标准的解决跨域问题的方案。通过在服务器端设置响应头Access-Control-Allow-Origin,允许指定的域名访问该资源。
  3. 代理:通过在同一域名下设置代理服务器,将跨域请求转发到目标服务器,然后将目标服务器的响应返回给浏览器,从而实现跨域访问。
  4. WebSocket:WebSocket协议可以在浏览器和服务器之间建立长连接,从而实现跨域通信。

单点登录的实现方式

Cookie

  1. 基于Cookie的单点登录:

    用户在第一次登录时,服务器在用户的浏览器中设置一个cookie,该cookie包含用户的登录信息。当用户访问其他应用程序时,这些应用程序会检查cookie中的信息,如果存在则认为用户已经登录。

  2. 跨域cookie 在默认情况下,浏览器会限制跨域请求的Cookie,以保护用户的隐私和安全。但是,有时候我们需要在不同域名之间共享Cookie,这就需要解决跨域问题。下面是一些解决跨域问题的方法:

Session

  1. session共享

    Session共享是指多个应用程序之间共享同一个用户Session信息的过程。在Web应用程序中,Session是用来存储用户状态信息的一种机制,它可以在用户访问同一个应用程序的不同页面时,保持用户的状态信息不变。

    然而,当用户访问不同的应用程序时,每个应用程序都会创建一个新的Session,这样就导致了Session信息的不一致性。为了解决这个问题,我们可以使用Session共享技术,将Session信息存储在一个外部存储中,比如Redis、MongoDB等,从而实现多个应用程序之间的Session共享。

    在实现Session共享时,我们需要考虑一些问题,比如Session的序列化和反序列化、Session的过期策略、Session的访问控制等。我们可以使用一些现成的框架来实现Session共享,比如Spring Session、Apache Shiro等。这些框架提供了一些方便的API和配置选项,使得Session共享变得更加容易和灵活。

  2. 如何实现session共享

    1. 数据库共享:将session存储在数据库中,不同的应用服务器通过访问同一数据库来实现session共享。
    2. 缓存共享:将session存储在缓存中,不同的应用服务器通过访问同一缓存来实现session共享。常用的缓存系统有Redis、Memcached等。
    3. 文件共享:将session存储在共享文件系统中,不同的应用服务器通过访问同一文件系统来实现session共享。
    4. Cookie共享:将session ID存储在cookie中,不同的应用服务器通过访问同一域名下的cookie来实现session共享。
  3. session跨域和解决方案

    所谓 Session 跨域就是摒弃了系统(Tomcat)提供的 Session,而使用自定义的类似 Session 的机制来保存客户端数据的一种解决方案。 如:通过设置 cookie 的 domain 来实现 cookie 的跨域传递。在 cookie 中传递一个自定义 的 session_id。这个 session_id 是客户端的唯一标记。将这个标记作为 key,将客户端需要保 存的数据作为 value,在服务端进行保存(数据库保存或 NoSQL 保存)。这种机制就是 Session 的跨域解决。

  4. 使用同一顶级域名下的二级域名。比如,a.example.com和b.example.com都是example.com的子域名,它们可以通过设置Cookie的domain属性为“.example.com”来共享Cookie。
  5. 使用iframe或者JSONP跨域通信。这种方式可以通过在同一页面中嵌入iframe或者使用JSONP的方式来实现跨域通信,从而共享Cookie。
  6. 使用CORS(跨域资源共享)。CORS是一种浏览器技术,它允许服务器在HTTP响应头中指定允许跨域访问的域名,从而实现跨域共享Cookie。

    Token

基于Token的单点登录:

使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。

大概的流程 是这样的: 客户端使用用户名、密码请求登录 服务端收到请求,去验证用户名、密码 验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端 客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户 端返回请求的数据 使用 Token 验证的优势:

无状态、可扩展 在客户端存储的 Tokens 是无状态的,并且能够被扩展。基于这种无状态和不存储 Session 信息,负载负载均衡器能够将用户信息从一个服务传到其他服务器上。 安全性 请求中发送 token 而不再是发送 cookie 能够防止 CSRF(跨站请求伪造)。即使在客户端使 用 cookie 存储 token,cookie 也仅仅是一个存储机制而不是用于认证。不将信息存储在 Session 中,让我们少了对 session 操作。

Oauth2

基于OAuth2.0的单点登录:OAuth2.0是一种授权框架,可以用于实现单点登录。用户在第一次登录时,服务器会将用户的授权信息存储在OAuth2.0服务器中。当用户访问其他应用程序时,这些应用程序会向OAuth2.0服务器请求授权信息,如果授权信息有效则认为用户已经登录。

jwt

1 JWT(JSON Web Token)是一种用于身份验证和授权的开放标准。它可以在不同的应用程序之间共享用户身份信息,从而实现单点登录(SSO)。

  1. JWT 是一种紧凑且自包含的,用于在多方传递 JSON 对象的技术。
  2. 传递的数据可以使用 数字签名增加其安全行。可以使用 HMAC 加密算法或 RSA 公钥/私钥加密方式。
  3. 紧凑:数据小,可以通过 URL,POST 参数,请求头发送。且数据小代表传输速度快。
  4. 自包含:使用 payload 数据块记录用户必要且不隐私的数据,可以有效的减少数据库访 问次数,提高代码性能。

    JWT 一般用于处理用户身份验证或数据信息交换。 用户身份验证:一旦用户登录,每个后续请求都将包含 JWT,允许用户访问该令牌允许 的路由,服务和资源。单点登录是当今广泛使用 JWT 的一项功能,因为它的开销很小,并 且能够轻松地跨不同域使用。

2 实现JWT单点登录的一般步骤如下:

  1. 用户在应用程序A中登录,应用程序A验证用户身份成功后,生成一个JWT Token,并将该Token返回给用户。
  2. 用户在访问应用程序B时,将该Token作为请求头或请求参数发送给应用程序B。
  3. 应用程序B接收到请求后,解析Token,验证Token的有效性和正确性。
  4. 如果Token验证通过,则应用程序B认为用户已经登录,并且可以使用Token中包含的用户信息进行授权和访问控制。

3 在实现JWT单点登录时,我们需要注意以下几点:

  1. JWT Token需要使用安全的算法进行签名和加密,以防止Token被篡改或伪造。
  2. JWT Token中应该只包含最少的用户信息,比如用户ID、用户名等,而不应该包含敏感信息,比如密码等。
  3. JWT Token应该设置有效期,以防止Token被滥用。
  4. 应用程序需要对Token进行管理和撤销,比如在用户退出登录时,需要将Token失效。

框架实现

shiro和spring security

Shiro和Spring Security都是用于身份验证和授权的Java安全框架,它们的主要区别如下:

  1. 架构设计:Shiro是一个轻量级的框架,它的设计目标是简单、易用、灵活,可以与任何框架和应用程序集成;而Spring Security是一个全面的安全框架,它是基于Spring框架的,因此可以很好地与Spring应用程序集成。
  2. 功能特点:Shiro提供了身份验证、授权、加密、会话管理等基本安全功能,同时还支持Web应用程序和非Web应用程序;而Spring Security提供了与Spring框架集成的全面安全功能,包括基于URL的访问控制、方法级别的访问控制、LDAP集成、OpenID集成、OAuth集成等。
  3. 配置方式:Shiro的配置方式比较简单,可以通过INI文件、XML文件、Java代码等方式进行配置;而Spring Security的配置方式比较复杂,需要使用XML或Java配置文件进行配置。
  4. 社区支持:Spring Security是由Spring社区维护和支持的,因此拥有更多的开发者和用户,可以获得更好的技术支持和文档资料;而Shiro的社区相对较小,但是Shiro的文档和示例比较丰富,易于学习和使用。

综上所述,Shiro适合小型应用程序和非Spring应用程序,它的设计简单、易用、灵活;而Spring Security适合大型应用程序和Spring应用程序,它提供了全面的安全功能和与Spring框架的深度集成。

相关文章
|
机器学习/深度学习 存储 自然语言处理
简单聊一聊大模型微调技术-LoRA
LoRA(Low-Rank Adaptation)是一种用于减少大模型微调中参数数量和计算资源的技术。通过引入低秩分解,LoRA 仅更新少量参数,从而显著降低显存消耗和计算需求。适用于大规模预训练模型的微调、跨领域迁移学习、低资源设备部署和多任务学习等场景。例如,在微调 BERT 模型时,LoRA 可以仅调整约 0.1% 的参数,保持与全量微调相近的性能。
2449 0
|
缓存 监控 数据可视化
linux查看内存信息
在Linux中检查内存使用:`free -h`或`-m`显示简洁内存统计;`cat /proc/meminfo`获取详细信息;`top`或`htop`(如果安装)实时监控进程内存占用;`vmstat`查看虚拟内存统计;`sar -r`(需要sysstat)报告系统内存活动。图形工具如Gnome System Monitor提供可视化界面。
728 4
|
存储 关系型数据库 OLAP
TiDB适用场景解析:海量数据存储与高并发读写的利器
【2月更文挑战第25天】随着大数据时代的到来,海量数据存储和高并发读写成为众多企业面临的挑战。TiDB作为一种高性能、分布式的关系型数据库,以其独特的架构和强大的功能,在多个场景中展现出了卓越的性能。本文将详细探讨TiDB在海量数据存储、高并发读写等场景下的适用情况,分析其在不同业务场景中的优势与应用价值。
1388 1
|
5月前
|
人工智能 自然语言处理 安全
AI技术发展下,单智能体局限性凸显,如何通过MCP和A2A协议实现智能体团队协作转变?
本文智能体专家三桥君探讨了AI智能体协作的关键技术MCP(工具调用协议)和A2A(智能体协作协议)。MCP扩展智能体功能边界,支持动态连接外部工具;A2A实现智能体间的安全协作与状态同步,通过AgentCard实现能力匹配。二者集成后,可构建跨框架协作生态,解决复杂任务处理难题。三桥君指出,拥抱该技术体系是突破单智能体局限、实现AGI落地的核心路径。
286 0
|
5月前
|
人工智能 Nacos 开发者
手把手教你搭建MCP服务器
Model Context Protocol(MCP)正成为AI智能体连接外部工具的主流标准。本文详解两种搭建方案,助你构建专属AI工具扩展引擎,实现工具调用的标准化与高效集成。
|
12月前
|
存储 弹性计算 安全
云基础设施处理器CIPU 2.0技术解读
本文深入解读阿里云的CIPU(Cloud Infrastructure Processing Unit)技术,探讨其在云计算中的定位与价值。面对当前XPU命名泛滥的问题,阿里云为何选择CIPU这一名称?CIPU旨在解决云计算中的弹性、安全、稳定、性能和成本五大核心需求。通过对比DPU和IPU,CIPU更专注于云环境下的基础设施处理,确保数据的安全性、传输的可靠性和存储的稳定性。此外,文章还回顾了神龙计算的历史发展,强调CIPU2.0在提升性能、优化资源调度和满足大客户需求方面的进展。最终,CIPU作为手段,其核心目标是为客户提供更高性价比和更稳定的云服务。
|
弹性计算 数据挖掘 测试技术
ECS e实例测评
ECS e实例是阿里云推出的经济型云服务器,适合中小规模应用。性能上能满足基本需求,但在高并发场景下表现一般。性价比高,价格亲民,适合预算有限的开发者。用户体验良好,配有丰富的技术文档,但部分高级功能操作说明有待优化。
227 18
|
安全 数据安全/隐私保护
单点登录(SSO)看这一篇就够了
单点登录(SSO)看这一篇就够了
2161 5
|
敏捷开发 弹性计算 持续交付
阿里云云效产品使用合集之同一个主机部署是否支持下载多个制品
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。