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
进行体验。锁定: 码农小胖哥 后续会详细的来分析相关的机制。