前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Security基于Oauth2的SSO单点登录怎样做?一个注解搞定

Spring Security基于Oauth2的SSO单点登录怎样做?一个注解搞定

作者头像
陶陶技术笔记
发布2020-06-02 16:26:22
1.4K0
发布2020-06-02 16:26:22
举报
文章被收录于专栏:陶陶技术笔记陶陶技术笔记

一、说明

单点登录顾名思义就是在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统,免除多次登录的烦恼。本文主要介绍同域跨域两种不同场景单点登录的实现原理,并使用 Spring Security 来实现一个最简单的跨域 SSO客户端。

二、原理说明

单点登录主流都是基于共享 cookie 来实现的,下面分别介绍 同域 和 跨域 下两种场景具体怎样实现共享cookie的

2.1. 同域单点登录

适用场景:都是企业自己的系统,所有系统都使用同一个一级域名通过不同的二级域名来区分。

举个例子:公司有一个一级域名为 zlt.com ,我们有三个系统分别是:门户系统(sso.zlt.com)、应用1(app1.zlt.com)和应用2(app2.zlt.com),需要实现系统之间的单点登录,实现架构如下:

核心原理:

  1. 门户系统设置 Cookie 的 domain 为一级域名也就是 zlt.com,这样就可以共享门户的 Cookie 给所有的使用该域名(xxx.zlt.com)的系统
  2. 使用Spring Session等技术让所有系统共享Session
  3. 这样只要门户系统登录之后无论跳转应用1或者应用2,都能通过门户Cookie中的sessionId读取到Session中的登录信息实现单点登录

2.2. 跨域单点登录

单点登录之间的系统域名不一样,例如第三方系统。由于域名不一样不能共享Cookie了,这样就需要通过一个单独的授权服务(UAA)来做统一登录,并基于共享UAA的Cookie来实现单点登录。

举个例子:有两个系统分别是:应用1(webApp.com)和应用2(zlt.com)需要实现单点登录,另外有一个UAA授权中心(sso.com),实现架构如下:

核心原理:

  1. 访问系统1判断未登录,则跳转到UAA系统请求授权
  2. 在UAA系统域名sso.com下的登录地址中输入用户名/密码完成登录
  3. 登录成功后UAA系统把登录信息保存到Session中,并在浏览器写入域为sso.com的Cookie
  4. 访问系统2判断未登录,则跳转到UAA系统请求授权
  5. 由于是跳转到UAA系统的域名sso.com下,所以能通过浏览器中UAA的Cookie读取到Session中之前的登录信息完成单点登录

2.3. 基于Oauth2的跨域单点登录流程

关于Oauth2的授权码模式这里就不做介绍了,自行找资料了解

三、Spring Security实现

Oauth2单点登录除了需要授权中心完成统一登录/授权逻辑之外

基于Spring Security实现的UUA统一授权中心可以参考:https://gitee.com/zlt2000/microservices-platform/tree/master/zlt-uaa

各个系统本身(sso客户端)也需要实现以下逻辑:

  1. 拦截请求判断登录状态
  2. UAA授权中心通过Oauth2授权码模式交互完成登录/单点登录
  3. 保存用户登录信息

以上逻辑只需使用一个 @EnableOAuth2Sso 注解即可实现

SpringBoot配置如下:

下图是访问sso客户端@EnableOAuth2Sso注解与UAA授权中心通过Oauth2授权码模式交互完成单点登录的步骤

请结合上面时序图中单点登录系统2的1~5步

PS:如果系统用的不是 Spring Security 怎么办?理解原理自行实现

四、demo下载地址

https://gitee.com/zlt2000/microservices-platform/tree/master/zlt-demo/sso-demo

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 陶陶技术笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、说明
  • 二、原理说明
    • 2.1. 同域单点登录
      • 2.2. 跨域单点登录
        • 2.3. 基于Oauth2的跨域单点登录流程
        • 三、Spring Security实现
        • 四、demo下载地址
        相关产品与服务
        访问管理
        访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档