当前位置: 首页 > 后端技术 > PHP

单点登录实现原理及小结

时间:2023-03-29 20:59:16 PHP

SSO实现原理及总结无需输入其他平台的账号密码,即可自动登录一个平台的账号密码,即单点登录。点击登录,现在总结一下这两周的研究成果。一、单点登录的概念什么是单点登录?单点登录的全称是SingleSignOn(以下简称SSO),意思是在多系统应用组中登录一个系统后,无需再次登录,即可在所有其他系统中获得授权,包括单点登录和单点注销。用户登录成功后,会与sso认证中心和各个子系统建立session。用户与sso认证中心之间建立的会话称为全局会话,用户与各子系统之间建立的会话称为本地会话。二、单点登录的两种方式1、同域名共享cookie如果您的所有平台都在同一个域名下,您可以使用同域名共享cookie的方式来完成单点信息共享-在。理论上可以将web应用组中所有子系统的域名统一在一个顶级域名下,比如“*.baidu.com”,然后将它们的cookie域设置为“baidu.com”。很多早期的多系统登录都是采用这种同域名共享cookie的方式。  不过,管用的并不好,cookies的分享方式也有很多限制。首先,应用组的域名要统一;其次,应用组各系统使用的技术(至少是web服务器)必须相同,否则cookie的key值(tomcat为JSESSIONID)不同,无法维持session。语言技术平台登录,如java、php、.net系统;第三,cookie本身并不安全。  因此,我们需要一种新的登录方式来实现多系统应用组的登录,即单点登录2、SSO认证授权登录。以前的方法有很大的局限性。不是的,这里我们可以使用第三方授权来实现。实现多平台单点登录,前提是多个平台必须有唯一的账号,比如手机号、邮箱或者用户名,这样才能确定是哪个用户。具体实现思路如果公司有两个不同域名或IP下的管理网站,a.com和b.com,我们想输入用户名和密码登录a.com,就可以自动登录b.com,如何实现呢?登录a.com后,会在a平台生成session信息。如果我们登陆b.com,如何判断用户已经登陆过平台a,然后自己登陆呢?这里需要使用第三方平台做授权验证,即c.com。授权中心维护着一套共享的账号和密码。当用户访问a.com时,我们会跳转到c.com,并带上a.com的源访问地址,用于判断c.com是否有登录。如果没有,将显示登录界面。登录成功后,会生成session信息,同时会生成一个授权token,保存在c.comcookie中。然后返回原地址。如果你已经登录过(也就是你已经被授权),你会得到cookie中保存的Token信息,然后跳转回原来的访问地址。如果a.com判断有Token信息,则拿这个Token向c.com发送http请求,判断Token是否有效,如果有效则返回用户信息,然后a.com会自动登录收到信息后进入a.com;访问b.com的时候,也会去c.com判断是否已经授权,因为a.com已经授权了,所以会把授权Token返回给b.com,然后b.com判断这个Token是否有效,有效则返回用户信息,b.com自动登录,这是一个简单的单点登录过程。一个完整的流程图: