springOAuth2的三种模式的实践(授权码模式,密码模式,客户端模式)

不得不说年纪大了,写一篇文章后简直就是老眼昏花了,OK,言归正传,上篇文章写了怎么部署springOAuth2以及个人对这方面知识的简单理解,传送门在这里https://blog.csdn.net/qq_22624361/article/details/88553568
这篇文章主要讲一下OAuth2的三种模式的实践。
首先我们先了解下基本知识:
OAuth2定义了4种模式:
授权码模式(authorization code)
简化模式(implicit)
密码模式(resource owner password credentials)
客户端模式(client credentials)(主要用于api认证,跟用户无关)
关于详细的基本知识可以去阮一峰老师的博客去了解下,传送门在这里
http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html
OK,讲完基础,我们接下来直接来试验每一种方式
1.授权码模式
我们经常可以在网上看到通过微信登录,QQ登录等字眼,举个例子,比如我们想登入csdn的时候我们就会选择微信或者QQ登录的方式,在这里就发生了我们的授权码的流转,授权码模式也是作为OAuth2最经典的模式被广泛使用,下面是时序图
在这里插入图片描述
(A)用户访问客户端(csdn),后者将前者导向认证服务器(微信鉴权)。

(B)用户选择是否给予客户端授权(输入用户名和密码并授权)。

(C)假设用户给予授权,认证服务器将用户导向客户端事先指定的"重定向URI"(redirection URI)(授权成功),同时附上一个授权码。

(D)客户端收到授权码,附上早先的"重定向URI",向认证服务器(微信认证)申请令牌。这一步是在客户端的后台的服务器上完成的,对用户不可见。

(E)认证服务器核对了授权码和重定向URI,确认无误后,向客户端发送访问令牌(access token)和更新令牌(refresh token)。

大致了解流程之后呢,我们开启我们的服务进行测试。
首先我们先在浏览器里面输入请求获取授权code的地址
http://localhost:8882/oauth/authorize?grant_type=authorization_code&scope=read&client_id=client_4&client_secret=123456&response_type=code&redirect_uri=https://www.baidu.com
拼装好我们为客户端设置的参数
response_type:code(授权码模式下springOAuth2规定为code);
redirect_uri:授权成功后的回调地址;
然后我们可以看到下面的页面

这里就是客户输入用户名和密码授权的那一步,我们输入我们规定的用户名和密码

输入成功后,鉴权服务会要求我们是否用户授权,我们选择Authorize,
在这里插入图片描述
之后我们可以看到我们的授权code返回了,接下来我们拿些这个code去鉴权服务拿token
在这里插入图片描述
注意这里都是必填参数,特别是code(一次性有效)和redirect_uri,我们成功的获取了token,然后拿着我们的token去请求我们的资源服务就OK了。
2.密码模式
主要是适用于客户端来获取用户信息的场景,下面是时序图

(A)用户向客户端提供用户名和密码。

(B)客户端将用户名和密码发给认证服务器,向后者请求令牌。

(C)认证服务器确认无误后,向客户端提供访问令牌。
然后我们还是简单的尝试一下

与授权码模式不同,不需要认证服务颁发的授权码,只需要用户名和密码以及我们设置的客户端信息就可以了。
3.简化模式
这种模式应该不经过第三方服务器验证,所以我们就不先研究了,也不建议使用这种模式。
4.客户端模式
主要适用于服务端之间的调用,比如openAPI等,下面是时序图
在这里插入图片描述
(A)客户端向认证服务器进行身份认证,并要求一个访问令牌。

(B)认证服务器确认无误后,向客户端提供访问令牌。
我们来测试一下

可以看到客户端模式就比较简单了,只需要携带客户端信息就可以了
这篇主要是对OAuth2的三种主要模式的演练,下篇文章会讲解用jdbc来储存token信息以及客户端和用户信息。

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值