SSO单点登录逻辑

网站的单点登录(Single Sign-On, SSO)逻辑旨在实现用户只需在一个地方进行一次身份验证,就能访问多个相互信任的应用系统或网站,无需在每个系统上单独登录。以下是单点登录的基本逻辑流程:

1. 用户访问受保护资源
用户尝试访问某个集成到SSO体系中的应用(如应用A)。应用A检测到用户未登录,于是重定向用户到SSO系统(通常是中央认证服务,如CAS、OAuth服务器、OpenID Connect提供者等)的登录页面。

2. 用户身份验证
用户在SSO系统的登录页面输入其凭据(如用户名和密码)。SSO系统通过验证这些凭据来确认用户的身份。这一步可能涉及与后端用户目录(如LDAP、AD)的交互,或者使用本地用户数据库进行验证。

3. 生成和传递身份凭证
一旦用户身份得到验证,SSO系统将生成一个代表该用户已通过验证的身份凭证。这个凭证通常采用以下形式之一:

Session Cookie:SSO系统在用户的浏览器上设置一个安全的HTTP-only cookie,用于标识已登录用户。后续对受保护应用的请求会自动携带此cookie,从而实现无感知的身份验证。

Token(如JWT):SSO系统发放一个经过签名的JSON Web Token(JWT)或其他类型的访问令牌给用户浏览器。用户浏览器在访问其他应用时,需将此令牌附在请求头中,供应用验证。

4. 用户重定向回原始应用
验证成功后,SSO系统将用户重定向回最初试图访问的应用A,并在重定向过程中(通常是查询参数或通过POST请求)传递必要的身份凭证信息(如token或一个表明身份已验证的票据)。应用A收到这些信息后,开始执行以下操作:

验证凭证:应用A与SSO系统通信(如有必要),验证接收到的身份凭证的有效性。这可能包括检查JWT签名、查询SSO系统的验证接口,或验证传递回来的票据。

建立本地会话:验证成功后,应用A在自己的会话管理系统中为用户创建一个新的会话,关联用户的账户信息。此时,用户在应用A中被视为已登录。

5. 访问其他受保护应用
用户在不退出的情况下访问另一个集成到SSO体系的应用B。应用B检测到用户未登录,同样重定向用户到SSO系统。由于用户浏览器上已经存在SSO系统设置的session cookie或持有有效的token:

SSO系统识别已登录状态:SSO系统通过检测浏览器上的cookie或接收到的token,识别出用户已通过验证,无需再次输入凭据。

SSO系统直接重定向回应用B:基于此识别,SSO系统立即重定向用户回应用B,并传递必要的身份凭证。应用B执行与应用A相同的验证和会话建立过程,用户无需再次登录即可访问应用B的内容。

6. 登出操作
当用户在任何一个应用中选择登出时,该应用会通知SSO系统注销用户会话。SSO系统清除用户的session cookie或使持有的token失效,并可能触发一个登出通知,通知所有相关应用清除各自的本地会话。这样,用户在所有集成SSO的系统中均被视为已登出,实现了单点登出(Single Logout, SLO)。

总结来说,单点登录逻辑的核心在于利用一个统一的认证中心来集中处理用户身份验证,通过安全的凭证传递机制(如cookies或tokens)以及重定向流程,使得用户能够在多个互信应用之间无缝切换,无需多次登录。
1:有3个应用 如:A淘宝,B小米之家,C华为, 第3方权威机构开发的 D: sso体系 (已经集成了A,B,C应用)

2:用户想要在A,B,C 3个系统之间随意登录,首先得有A,B,C,D 对应的账号密码,就是有认证注册过
 一个用户想登录A系统,应该是点击A系统的SSO标识(才会采用该方案,去D sso体系,输入账号和密码)
3:成功登录D认证系统后 会带上对应的token,和 D sso登录中心自己的用户id 如10011, 在A系统中查询是否有绑定用户id 10011,如果有就查到对应的A系统用户账号密码生成 A应用的登录流程,
如果没有绑定就要输入 A系统的 账号密码(账号密码或者手机或者邮箱等方式,看该应用自己的登录逻辑)和id 10011来绑定
4:绑定成功既可以打开A应用了,其他B,C应用一样的逻辑处理

 

posted @ 2024-04-09 14:05  天天向上518  阅读(49)  评论(0编辑  收藏  举报