springboot和springsecurity整合OAuth2
1. OAuth
2.0介绍
OAuth(开放授权)是⼀个开放标准,允许⽤户授权第三⽅应⽤访问他们存储在另外的服务提供者上的信息,⽽不需要将⽤户名和密码提供给第三⽅应⽤或分享他们数据的所有内容。OAuth2.0是OAuth协议的延续版本,但不向后兼容OAuth 1.0即完全废⽌
了OAuth1.0。很多⼤公司如Google,Yahoo,Microsoft等都提供了OAUTH认证服务,这些都⾜以说明OAUTH标准逐渐成为开放资源授权的标准。
Oauth协议⽬前发展到2.0版本,1.0版本过于复杂,2.0版本已得到⼴泛应⽤。
下边分析⼀个Oauth2认证的例⼦,通过例⼦去理解OAuth2.0协议的认证流程,本例⼦是⿊马程序员⽹站使⽤认证的过程,这个过程的简要描述如下:
⽤户借助认证登录⿊马程序员⽹站,⽤户就不⽤单独在⿊马程序员注册⽤户,怎么样算认证成功吗?⿊马程序
员⽹站需要成功从获取⽤户的⾝份信息则认为⽤户认证成功,那如何从获取⽤户的⾝份信息?⽤户信息的
拥有者是⽤户本⼈,需要经过⽤户的同意⽅可为⿊马程序员⽹站⽣成令牌,⿊马程序员⽹站拿此令牌⽅可从微
信获取⽤户的信息。
spring boot选择题
1、客户端请求第三⽅授权
⽤户进⼊⿊马程序的登录页⾯,点击的图标以账号登录系统,⽤户是⾃⼰在⾥信息的资源拥有者。
点击“”出现⼀个⼆维码,此时⽤户扫描⼆维码,开始给⿊马程序员授权。
2、资源拥有者同意给客户端授权
资源拥有者扫描⼆维码表⽰资源拥有者同意给客户端授权,会对资源拥有者的⾝份进⾏验证,验证通过后,会询问⽤户是否给授权⿊马程序员访问⾃⼰的数据,⽤户点击“确认登录”表⽰同意授权,认证服务器会颁发⼀个授权码,并重定向到⿊马程序员的⽹站。
3、客户端获取到授权码,请求认证服务器申请令牌
此过程⽤户看不到,客户端应⽤程序请求认证服务器,请求携带授权码。
4、认证服务器向客户端响应令牌
认证服务器验证了客户端请求的授权码,如果合法则给客户端颁发令牌,令牌是客户端访问资源的通⾏证。
此交互过程⽤户看不到,当客户端拿到令牌后,⽤户在⿊马程序员看到已经登录成功。
5、客户端请求资源服务器的资源
客户端携带令牌访问资源服务器的资源。
⿊马程序员⽹站携带令牌请求访问服务器获取⽤户的基本信息。
6、资源服务器返回受保护资源
资源服务器校验令牌的合法性,如果合法则向⽤户响应资源信息内容。
以上认证授权详细的执⾏流程如下:
OAuth2.0认证流程:
OAauth2.0包括以下⾓⾊:
1、客户端
本⾝不存储资源,需要通过资源拥有者的授权去请求资源服务器的资源,⽐如:Android客户端、Web客户端(浏览器端)、客户端等。
2、资源拥有者
通常为⽤户,也可以是应⽤程序,即该资源的拥有者。
3、授权服务器(也称认证服务器)
⽤于服务提供商对资源拥有的⾝份进⾏认证、对访问资源进⾏授权,认证成功后会给客户端发放令牌
(access_token),作为客户端访问资源服务器的凭据。本例为的认证服务器。
4、资源服务器
存储资源的服务器,本例⼦为存储的⽤户信息。
现在还有⼀个问题,服务提供商能允许随便⼀个客户端就接⼊到它的授权服务器吗?答案是否定的,服务提供商会
给准⼊的接⼊⽅⼀个⾝份,⽤于接⼊时的凭据:
client_id:客户端标识
client_secret:客户端秘钥
因此,准确来说,授权服务器对两种OAuth2.0中的两个⾓⾊进⾏认证授权,分别是资源拥有者、客户端。
2. OAuth2.0 中四种授权⽅式
1. 授权码模式( authorization code)
流程
说明:【A服务客户端】需要⽤到【B服务资源服务】中的资源
第⼀步:【A服务客户端】将⽤户⾃动导航到【B服务认证服务】,这⼀步⽤户需要提供⼀个回调地址,
以备【B服务认证服务】返回授权码使⽤。
第⼆步:⽤户点击授权按钮表⽰让【A服务客户端】使⽤【B服务资源服务】,这⼀步需要⽤户登录B服务,也就是说⽤户要事先具有B服务的使⽤权限。
第三步:【B服务认证服务】⽣成授权码,授权码将通过第⼀步提供的回调地址,返回给【A服务客户端】。
注意这个授权码并⾮通⾏【B服务资源服务】的通⾏凭证。
第四步:【A服务认证服务】携带上⼀步得到的授权码向【B服务认证服务】发送请求,获取通⾏凭证token。
第五步:【B服务认证服务】给【A服务认证服务】返回令牌token和更新令牌refresh token。
使⽤场景
授权码模式是OAuth2中最安全最完善的⼀种模式,应⽤场景最⼴泛,可以实现服务之间的调⽤,常见的,QQ等第三⽅登录也可采⽤这种⽅式实现。
2. 简化模式(implicit)
流程
说明:简化模式中没有【A服务认证服务】这⼀部分,全部有【A服务客户端】与B服务交互,整个过程不再有授权码,token直接暴露在浏览器。
第⼀步:【A服务客户端】将⽤户⾃动导航到【B服务认证服务】,这⼀步⽤户需要提供⼀个回调地址,以备【B服务认证服务】返
回token使⽤,还会携带⼀个【A服务客户端】的状态标识state。
第⼆步:⽤户点击授权按钮表⽰让【A服务客户端】使⽤【B服务资源服务】,这⼀步需要⽤户登录B服务,也就是说⽤户要事先具有B服务的使⽤权限。
第三步:【 B服务认证服务】⽣成通⾏令牌token,token将通过第⼀步提供的回调地址,返回给【A服务客户端】。
使⽤场景
适⽤于A服务没有服务器的情况。⽐如:纯⼿机⼩程序,JavaScript语⾔实现的⽹页插件等。
3. 密码模式(resource owner password credentials)
流程
第⼀步:直接告诉【A服务客户端】⾃⼰的【B服务认证服务】的⽤户名和密码
第⼆步:【A服务客户端】携带【B服务认证服务】的⽤户名和密码向【B服务认证服务】发起请求获取
token。
第三步:【B服务认证服务】给【A服务客户端】颁发token。
使⽤场景
此种模式虽然简单,但是⽤户将B服务的⽤户名和密码暴露给了A服务,需要两个服务信任度⾮常⾼才能使
⽤。
4. 客户端模式(client credentials)
流程
说明:这种模式其实已经不太属于OAuth2的范畴了。A服务完全脱离⽤户,以⾃⼰的⾝份去向B服务索取token。换⾔之,⽤户⽆需具备B服务的使⽤权也可以。完全是A服务与B服务内部的交互,与⽤户⽆关了。
第⼀步:A服务向B服务索取token。
第⼆步:B服务返回token给A服务。
使⽤场景
A服务本⾝需要B服务资源,与⽤户⽆关。
3. OAuth2.0 sql语句
说明
既可以写死在代码中,也可以写⼊到数据库中,通常写⼊到数据库
建表语句
1. 创建⽗⼯程
2. 创建资源提供⽅模块

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。