本文目录一览:
OAuth2实现单点登录SSO
1. 前言
技术这东西吧,看别人写的好像很简单似的,到自己去写的时候就各种问题,“一看就会,一做就错”。网上关于实现SSO的文章一大堆,但是当你真的照着写的时候就会发现根本不是那么回事儿,简直让人抓狂,尤其是对于我这样的菜鸟。几经曲折,终于搞定了,决定记录下来,以便后续查看。先来看一下效果
2. 准备
2.1. 单点登录
最常见的例子是,我们打开淘宝APP,首页就会有天猫、聚划算等服务的链接,当你点击以后就直接跳过去了,并没有让你再登录一次
下面这个图是我再网上找的,我觉得画得比较明白:
可惜有点儿不清晰,于是我又画了个简版的:
重要的是理解:
2.2. OAuth2
推荐以下几篇博客
《 OAuth 2.0 》
《 Spring Security对OAuth2的支持 》
3. 利用OAuth2实现单点登录
接下来,只讲跟本例相关的一些配置,不讲原理,不讲为什么
众所周知,在OAuth2在有授权服务器、资源服务器、客户端这样几个角色,当我们用它来实现SSO的时候是不需要资源服务器这个角色的,有授权服务器和客户端就够了。
授权服务器当然是用来做认证的,客户端就是各个应用系统,我们只需要登录成功后拿到用户信息以及用户所拥有的权限即可
之前我一直认为把那些需要权限控制的资源放到资源服务器里保护起来就可以实现权限控制,其实是我想错了,权限控制还得通过Spring Security或者自定义拦截器来做
3.1. Spring Security 、OAuth2、JWT、SSO
在本例中,一定要分清楚这几个的作用
首先,SSO是一种思想,或者说是一种解决方案,是抽象的,我们要做的就是按照它的这种思想去实现它
其次,OAuth2是用来允许用户授权第三方应用访问他在另一个服务器上的资源的一种协议,它不是用来做单点登录的,但我们可以利用它来实现单点登录。在本例实现SSO的过程中,受保护的资源就是用户的信息(包括,用户的基本信息,以及用户所具有的权限),而我们想要访问这这一资源就需要用户登录并授权,OAuth2服务端负责令牌的发放等操作,这令牌的生成我们采用JWT,也就是说JWT是用来承载用户的Access_Token的
最后,Spring Security是用于安全访问的,这里我们我们用来做访问权限控制
4. 认证服务器配置
4.1. Maven依赖
这里面最重要的依赖是:spring-security-oauth2-autoconfigure
4.2. application.yml
4.3. AuthorizationServerConfig(重要)
说明:
4.4. WebSecurityConfig(重要)
4.5. 自定义登录页面(一般来讲都是要自定义的)
自定义登录页面的时候,只需要准备一个登录页面,然后写个Controller令其可以访问到即可,登录页面表单提交的时候method一定要是post,最重要的时候action要跟访问登录页面的url一样
千万记住了,访问登录页面的时候是GET请求,表单提交的时候是POST请求,其它的就不用管了
4.6. 定义客户端
4.7. 加载用户
登录账户
加载登录账户
4.8. 验证
当我们看到这个界面的时候,表示认证服务器配置完成
5. 两个客户端
5.1. Maven依赖
5.2. application.yml
这里context-path不要设成/,不然重定向获取code的时候回被拦截
5.3. WebSecurityConfig
说明:
5.4. MemberController
5.5. Order项目跟它是一样的
5.6. 关于退出
退出就是清空用于与SSO客户端建立的所有的会话,简单的来说就是使所有端点的Session失效,如果想做得更好的话可以令Token失效,但是由于我们用的JWT,故而撤销Token就不是那么容易,关于这一点,在官网上也有提到:
本例中采用的方式是在退出的时候先退出业务服务器,成功以后再回调认证服务器,但是这样有一个问题,就是需要主动依次调用各个业务服务器的logout
6. 工程结构
附上源码:
7. 演示
8. 参考
9. 文档
原文链接:
cjs是谁的名字的缩写?
cjs是成杰思的名字缩写。
成杰思,男,出生于江苏盐城,现居南京,从华侨大学中文系毕业后进入江苏广播电视总台工作;2002年,由他创办的大型脱口秀节目《男生宿舍》,每天晚上22:00至23:00在FM101.1江苏交通广播网播出。
节目开播十年来创造了居高不下的收听率,也吸引了听众群。随着主持人袁一博、焦阳的加入,《男生宿舍》人气逐渐变高。
人物经历
2003年,为《男生宿舍》设计了一个子栏目,叫“楼道歌手”。
2004年4月26日,《男生宿舍》为“楼道歌手”2003年度巡回演出比赛总冠军王海笑举办个人演唱会,吸引了一些高校学生前来观看。
2012年5月,成杰思被中华诗学研究会聘用为“中华诗学推广大使”。
PHP视频教程~!
你好呀
我的QQ 499015358 加我,
然后我把自己的视频资料都传给你,包括一个集合软件.
希望我们共同进步.
我的博客