单点登录设计方案及落地实践

单点登录设计与实现

在这里插入图片描述

共享Cookie

共享Cookie模式中,三个域名分别为a.beiming.com, b.beiming.com和c.beiming.com。
在这里插入图片描述
三个网址虽然前缀是不一样的,但是根域名是一样的。

假设我们这边登录了我们beiming网站A的这个系统,我们再去写入cookie的时候,我们就只写入beiming.com的这个地址。那么a,b,c就都包含在里面了。

那么当我们再去访问beiming网站B的时候,他也会把我们这个令牌给带上。只要北冥网站B和北冥网站A的校验方式是一样的,那么他就能够去实现我们自动免登录。

这个是我们共享cookie的一个原理。

跨域设置Cookie

可能会有网站,同时也可能会有APP,那么这样共享cookie的方式也是用不了的。

客户端模式

这种模式需要有一个桌面客户端。可以用第三方登录。

OAuth2.0模式

这种方案的成本会比共享Cookie模式麻烦一些,因为它需要有一个独立的认证中心。

假设我们的浏览器要登录我们的系统a,那么这个时候系统a会向我们的统一认证中心去询问我到底有没有登录过。

如果说没有登录过,那么这个时候,我们的sso认证中心,它会重定向到一个登录界面。然后返回给我们的浏览器。
在这里插入图片描述
到浏览器的时候就会输入我们的账号名密码,当我们输入完账号密码之后,这个时候,sso认证中心会去验证我们的登录逻辑,判断一下我们的账号密码是不是正确的。

在校验完之后,我们的认证中心再去创建我们的全局会话,创建完全局会话之后,然后再返回授权令牌给我们的系统1。它并不是直接返回给我们的浏览器的。

当我们的系统1一拿到我们的令牌之后,然后再拿这个令牌去向我们的认证中心去校验,如果说这个令牌是OK的,那么我们的认证中心,他再去注册我们的系统。也就是我们系统1的地址,然后再返回给我们的系统1,告诉他OK的。

这个时候系统1会去创建一个局部会话,因为这个时候他的令牌才会返回给前端,然后同时再返回一些受保护的资源。
在这里插入图片描述
一整个登录逻辑,就到这里就完成了。这个时候我们要是再访问系统2,我们就不需要经历前面这么复杂的步骤了。
在这里插入图片描述
当我们的浏览器去访问我们的系统2的时候,他一样会走一遍校验逻辑,首先去判断你有没有局部会话ID。如果说你没有局部会话ID,那么他就会去找我们的认证中心,他去询问我这个用户有没有登录过。

如果说这个用户在我们的系统1里面已经登录过了,那么就直接把那块令牌给我们系统2,那么我们的系统2再去校验这个令牌是不是OK。

如果说令牌有效的话,我们的系统2再去创建一个局部会话ID,然后把系统2的令牌返回给我们的浏览器。同时也把受保护的资源返回给浏览器。

那么这个就是他的一个实现逻辑。

具体代码

是有三个服务的:

  1. Auth服务
  2. Order服务
  3. Member服务

那么这三个服务都是独立的,我们首先来看一下我们认证中心里面的pom文件,这里主要引用的是spring-cloud-starter-oauth2,我们是通过这个组件来实现我们的SSO单点的。

同时在这里也引用了一个模板主键thymeleaf,这个模板是用来访问网页的。
在这里插入图片描述
这个模板是用来访问网页的。

初始化的SQL文件里面实现了一个非常基础的RBAC模型,就是我们的用户、我们的角色、我们的权限。
在这里插入图片描述
参考资料腾讯二面:设计单点登录方案现场实操,轻松拿捏还是直接挂了?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值