Spring Security 实战干货:OAuth2第三方授权初体验

Stella981
• 阅读 766

1. 前言

现在很多项目都有第三方登录或者第三方授权的需求,而最成熟的方案就是OAuth2.0授权协议。Spring Security也整合了OAuth2.0,在目前最新的 Spring Security 5中整合了OAuth2.0的客户端,我们可以很方便的使用Spring Security OAuth2来实现相关的需求。

接下来跟着胖哥的节奏搞一个第三方授权先直观的感受一下。假设我现在也不会OAuth2.0从零开始,产品给了一个使用码云做授权的需求,我们该怎么实现它?

2. 申请授权

这就像你想去某个公司上班,你要面试并提交很多资料证明你可以满足对方的需要,通过后公司同意你去上班,给你一个职位以及对应的权限、工号、工位。

同样的道理,我们要去码云申请一个授权功能,也就是在对方的开放平台上开个授信客户端。以后不管你是微信、支付宝还是 QQ 都是差不多的流程。申请成功后它们会给你下面这些字段概念。

因平台而异字段概念可能稍微有点出入,但是不会太大。

2.1 clientId

很长的一个字符串,这就是你的应用在这个的平台的“工号”,当你请求授权时要携带这个clientId作为你应用的标识。

2.2 clientSecret

客户端密钥,就像密码一样用以证明你的授权请求确实来自于你的应用。这个是敏感数据,要注意保密。

2.3 authorizationGrantType

授权的类型途径,这个当你向第三方开放平台申请时会明确告诉你可以使用的授权类型。你在请求授权时需要明确告诉第三方平台你的授权类型。

OAuth2.0 提供了常用的四种方式以及其它不常用的两种方式。

2.4 tokenUri

这个是第三方开放平台提供给你获取access_token的接口,这个access_token是你访问第三方开放平台开放资源的凭据。

2.5 userInfoUri

这个是你用来获取被授权人在第三方开放平台的用户信息的接口,大多数是公开信息基本不涉及的敏感信息,以达到不同平台之间信息共享的目的。

2.6 redirectUri

回调地址,有的平台叫callback。这有什么用呢?就像你面试留的手机或者电子信箱,面完面试官让你回去等通知面试结果。这个redirectUri就是用来通知你授权的结果的,当然这个比面试官要特么靠谱,成不成都会告诉你结果。

当然这里面试的例子不是特别的合适,只是方便你快速理解。

2.7 scope

这个就是授权的条目,指的是你要表明你要这个授权干什么用,某个公司发了很多 JD 有 Java 开发、Golang 开发、前端开发、测试、UI。你去面试肯定第一件事要告知面试官你面试哪个岗位一样。

当然关于 OAuth2.0 的scope可能更加丰富。

3. 体验 OAuth2.0 授权

学习接触一个新东西要不求甚解,先去直观感受它,了解它表面是如何运作的,然后再深入研究。

所以我直接先放出了Spring Security OAuth2.0实现码云第三方授权的DEMO,有兴趣的同学先直观感受下这个场景,后续我会由浅入深来共同学习这门技术。

3.1 使用方法

关注公众号:码农小胖哥 回复 authgitee 获取 Spring Security OAuth2.0 DEMO 后,直接运行对应的分支项目。然后浏览器访问接口。http://localhost:8082/oauth2/authorization/gitee进行体验。锁定下方公众号:码农小胖哥 后续会详细的来分析相关的机制。

Spring Security 实战干货:OAuth2第三方授权初体验

DD自研的沪牌代拍业务,点击直达

往期推荐

[

Git 提交代码之后的几种后悔药

](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzAxODcyNjEzNQ%3D%3D%26mid%3D2247507988%26idx%3D1%26sn%3Deac2f20e93ac43b5500b332121fa96db%26chksm%3D9bd30d8caca4849a04a6fdff013c5ed547b842fef1f149ea1e6fdf8039c26d2fdc807b80526a%26scene%3D21%23wechat_redirect)

[

为什么大多数IOC容器使用ApplicationContext,而不用BeanFactory

](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzAxODcyNjEzNQ%3D%3D%26mid%3D2247507988%26idx%3D2%26sn%3Dc43d99198d5767509cfef28e15f8fa17%26chksm%3D9bd30d8caca4849a2d0cbc452e572766a4e2698f7d0b2463d02684e17ba6a90121bcb2f8397b%26scene%3D21%23wechat_redirect)

[

JIRA、Confluence等产品明年2月停售本地化版本,将影响中国近90%的客户!

](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzAxODcyNjEzNQ%3D%3D%26mid%3D2247507847%26idx%3D1%26sn%3D82229c58743560a550e5732047a1f5db%26chksm%3D9bd3721faca4fb09eab8d219818cfa247a08255977b2637c1d3c92543c1b2cba801c184b6cbf%26scene%3D21%23wechat_redirect)

[

妙用 Intellij IDEA 创建临时文件,Git 跟踪不到的那种

](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzAxODcyNjEzNQ%3D%3D%26mid%3D2247507847%26idx%3D3%26sn%3D4ded1f84085e36ab4e2bdb5fb521cbe0%26chksm%3D9bd3721faca4fb09a5324e9f3d2c5d90d7f3ccffeb2e2e4acc205d6aba461dfae6a3cc36a84e%26scene%3D21%23wechat_redirect)

[

国内首个比特币勒索病毒制作者落网,但过程有点好笑...

](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzAxODcyNjEzNQ%3D%3D%26mid%3D2247507213%26idx%3D1%26sn%3D30648bf8b350856ebd8658c44504318e%26chksm%3D9bd37095aca4f983ce9a0400ea29e4978952a1d3f7f49aa3751c066815b8f1a541b717f1daa1%26scene%3D21%23wechat_redirect)

[

TIOBE公布11月榜单:Python势不可挡,超越Java !

](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzAxODcyNjEzNQ%3D%3D%26mid%3D2247506944%26idx%3D1%26sn%3Da0f229fb50e017520dcbbcf522384fb7%26chksm%3D9bd37198aca4f88e2923dd698bd20fb4a32732d650b5022a7427260d334c2aad684ba5cdad01%26scene%3D21%23wechat_redirect)

深度内容

推荐加入

Spring Security 实战干货:OAuth2第三方授权初体验

Spring Security 实战干货:OAuth2第三方授权初体验

Spring Security 实战干货:OAuth2第三方授权初体验

Spring Security 实战干货:OAuth2第三方授权初体验

Spring Security 实战干货:OAuth2第三方授权初体验

本文分享自微信公众号 - 程序猿DD(didispace)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
OAuth2.0 授权码理解
OAuth2.0授权模式本篇文章介绍OAuth的经典授权模式,授权码模式所谓授权无非就是授权与被授权,被授权方通过请求得到授权方的同意,并赋予某用权力,这个过程就是授权。那作为授权码就更加简单,第三方直接发起授权请求并希望能够得到某种我需要的权力。授权方根据第三方的需求提供相应的授权权限,最后生成一串付有权限的码来实现授权,这个
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这