【java面试】sso系统

虽然这个不是面经里经常出现的。好在基本概念比较明了,理解起来也不太费力,所以准备java面试的时候可以顺便看一下。

源码即正义

看了源码才发现作者是大名鼎鼎的WXG!好激动

https://gitee.com/xgpxg/SSO-DEMO

简介

sso系统是单点登录系统,避免同一个用户多次登陆不同系统。在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统。

这个系统仔我研究生学校就有用到,学生登录系统就是用sso写的。可以看到我们学校sso的登录页面网址是
http://xxx/profile/SAML2/Redirect/SSO?execution=e1s3

在没有sso的情况下,
当登陆一个网页应用时,即使浏览器使用了cookies,但是在不同域中,是不能共享同一个cookie的。这就导致一个用户在多个应用中必须登录多次。

流程

单个登录的一般流程如下(基于 Cookie):

当用户首次访问 A 系统时,系统 A 发现用户未登录,然后重定向到 SSO 身份验证中心,并携带请求 url 执行登录验证。

用户在 SSO 身份验证中心对用户名和密码进行身份验证。登录成功后,服务器生成票证,然后重定向到系统 A 的源 url 并将票证附加到 URL 参数。

系统 A 在网址参数中获取票证,并启动与 SSO 的票证比较。如果比较成功,系统 A 将释放并存储票证到 Cookie 中。

用户访问 B 系统。此时,B 系统已将票证带到域下,并直接向 SSO 启动票证测试。如果测试成功,则执行释放,并将票证存储在 Cookie 中(更新票证到期时间)。

当用户注销时,删除域下的 Cookie。

来自https://www.jianshu.com/p/75edcc05acfd
图片来自https://www.jianshu.com/p/75edcc05acfd

工具:redis

sso-server 使用 redis 存储用户票证,app-a 和 app-b 使用 Spring 拦截器过滤用户请求,如果验证失败,每个请求都需要验证索服务器的票证重新定向登录(带源 url)。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值