欢迎大家注意github.com/hsfxuebao。我希望这对每个人都会有所帮助。如果您认为有可能
Web应用程序采用浏览器/服务器体系结构,HTTP用作通信协议。HTTP是无状态协议。每个浏览器的请求将独立处理,并且不与先前或后续请求相关联。下图在下图中解释了此过程。与响应之间正确连接的三个请求/响应之间没有连接。
但这也意味着任何用户都可以通过浏览器访问服务器资源。如果要保护服务器的某些资源,则必须限制浏览器请求;为了限制浏览器请求,您必须确定浏览器请求,响应法律请求,忽略忽略的请求;要确定浏览器请求,必须清除浏览器请求状态。由于HTTP协议不是状态,让服务器和浏览器一起维护状态!这是
浏览器首次请求服务器,服务器创建了一个会话,然后,浏览器存储会话ID,并在后续请求和第三请求中带来了会话ID。一个用户,此过程在下图中说明了此过程,以及随后的请求与第一个请求关联
服务器将会话对象保存在内存中。浏览器如何保存会话ID?您可能会想到两种方法:
会话ID用作每个请求的参数。接收请求的服务器可以自然分析参数以获取会话ID,并确定它是否来自同一会话。显然,此方法不可靠。然后浏览器将维护此会话ID本身。每次发送HTTP请求时,浏览器都会自动发送会话ID。Cookie机制仅用于执行此操作。Cookie是浏览器存储少量数据的机制。数据以“键/值”的形式存储。发送HTTP请求时,浏览器会自动与cookie一起使用
这是,使用cookie请求响应的过程如下如下
有了会话机制,登录状态很容易理解。用户是合法用户,应将本会话标记为“授权”或“登录”和其他状态。由于它是会话的状态,因此自然存储在会话对象中。
当用户再次采访时,Tomcat检查会话对象中的登录状态
浏览器请求的带有登录状态的服务器模型如下所述
每次请求保护资源时,都会在会话对象中检查登录状态。只能访问Islogin = true的会话并实现登录机制。
Web系统长期以来从长期的单系统发展到由多系统组成的应用程序组。面对这么多的系统,用户想一个一个一个登录,然后一一取消?如下所述
Web系统开发为一个多系统应用程序组。复杂性应由系统而不是用户承担。对于用户而言,Web系统有多复杂,这是一个统一的整体。也就是说,访问Web系统的整个应用程序组与访问单个系统相同。
ESSENCEN在前端和后端的分离模式,前端的域名不一致,并且此时发生了交叉域访问问题。在请求的过程中,我们想返回到post/ for Post/获取请求,因此...出现...跨境问题。
目前的页面URL由请求页URL要求出于交叉域的原因
http://www.test.com/ and http://www.test.com/index.html non -Homogost(相同协议,域名,端口号是相同的)
http://www.test.com/ and https://www.test.com/index.html Cross -Domain协议(http/https)
http://www.test.com/和百度,您知道交叉域的主要域名是不同的(test/baidu)
http://www.test.com/ and http://blog.test.com/ cross-domain域名(www/blog)
http://www.test.com:8080/ and http://www.test.com:7001/ cross -domain端口号是不同的(8080/7001)
路口
单系统登录解决方案。但是cookie受到限制,这是
在这种情况下,例如“*.baidu.com”,然后在理论上可能是可能的,甚至在早期的许多系统都可以使用相同的域名共享cookie。但是,可行性并不意味着好。共享cookie有很多限制:
因此,我们需要一种全新的登录方法来实现多系统应用程序组的登录。这是
什么是单点登录?是的,包括一个点登录和单点取消两个部分
与单个系统登录相比,只有身份验证中心才能接受安全信息,例如用户的用户名和密码。其他系统不提供登录入口,仅接受认证中心的间接授权。通过代币授权,SSO认证中心验证用户的用户名和密码没有问题。创建授权令牌。在下一个跳跃过程中,授权令牌作为参数发送到每个子系统,并且子系统获取令牌卡。也就是说,要获得授权,您可以使用它来创建局的会话。本地会话登录方法与单个系统的登录方法相同。此过程,即一个点登录的原理,使用下图解释
下图在上面描述:
用户登录成功后,它将与SSO认证中心和各个子系统建立会话。建立本地会话后,用户访问子系统将不再通过SSO认证中心。全球对话和本地会议将有以下限制:
您可以通过网站的登录过程(例如Blog Garden,Baidu,CSDN,TAOBAO等)加深对单点登录的理解,请注意观察登录过程中的跳URL和参数
自然,一个点登录也必须取消一个点。在子系统中登录。所有子系统的会议将被破坏。使用下面的图片解释
SSO认证中心一直在听全球对话的状态。
简要说明了下图:
这只是基于Java的实现过程的简要介绍。它不提供完整的源代码。我了解原则。我相信您可以自己实施。让我们首先看一下SSO-CLIENT和SSO服务器想要实现的功能(下图:SSO认证中心= SSO服务器)
路口
路口
接下来,让我们根据原则逐步实现SSO!
Java拦截请求是三种方法:servlet,过滤和侦听器。我们在sso-client中使用filter.construct.java类并实现过滤器界面,将截距()方法添加到dofilter()方法中
从SSO客户到SSO认证中心不可用的请求,然后跳到登录页面。这个过程与SSO-CLIENT完全相同
用户在登录页面上输入用户名密码,请求登录,SSO认证中心检查用户信息,验证成功,并且会话状态标记为“登录”
授权令牌是一个随机字符。如何以哪种方式赚钱都没关系。只要您不重复,伪造就不容易。以下是一个示例。
SSO认证中心登录后,跳回子系统并附加令牌后,子系统(SSO-CLIENT)获得令牌,然后转到SSO认证中心检查,向Loginfilter.java的Dofilter()添加几行
使用httpclient实现了verify()方法。仅在这里简要介绍。有关HTTPCLIENT的详细使用,请参阅官方文档
用户在SSO认证中心登录后,SSO服务器创建了一个授权的令牌并存储了令牌。因此,SSO服务器对令牌的验证是找出是否存在和到期。
令牌和注册的系统地址通常存储在键值数据库中(例如REDIS),REDIS可以为token.redis的有效性周期设置有效时间在内存中运行,并且非常快,只是SSO,只是- 服务器不需要在任何数据中持续存在。
令牌和注册的系统地址可以存储在下图中描述的redis中。您可能会问,为什么要存储这些系统的地址?如果未存储,则取消时会很麻烦。用户向SSO认证中心提交请求。SSO认证中心取消了全球对话,但是我发送了取消请求以取消本地会议
令牌验证成功后,SSO-CLIENT将当前的本地会话标记为“登录”,修改loginfilter.java,添加几行
SSO-CLIENT还需要将当前会话ID与令牌绑定,表明本会话的登录状态与令牌有关。可以通过Java的哈希图保存这种关系。
用户将带有“注销”参数(取消请求)的请求发送到子系统。
SSO认证中心还以相同的方式确定SSO-CLIENT的请求(使用“注销”参数),而SSO认证中心取消了全局会话
SSO认证中心有一个全球听众。一旦取消全局会话,所有注册系统将被告知取消
github.com/xuxueli/xxl,downloadgitee.com/xuxueli0323 ...下载
XXL-SSO是一个分布式的单点登录框架。您只需要登录一次即可访问所有信任的应用程序系统。
在XXL-SSO的帮助下,您可以快速实现分布式系统的单点登录。
SSO服务器中央认证服务,支持客户端客户端对客户端应用程序sso session ID登录用户会话ID,SSO登录成功分配给用户的SSO用户登录用户信息,与基于cookie相对应,而不是登录请求请求请求请求。
基于令牌,未延长状态的请求:
支持自定义的日志记录有效有效性窗口,默认为24H,当登录状态的有效性窗口超过一半时,周期会自动延迟。
当不记得密码时,浏览器已关闭,登录状态失败;记住密码时,登录状态将自动推迟。根据自定义延长时间,可以原则上无限期地扩展。
自定义路径不包括路径,允许设置多个,并支持蚂蚁表达式。消除不需要在SSO客户端上过滤的路径。
单点登录原理和简单实施
阅读本文(SSO)是足够的
