OAuth2.0 - 简化模式密码模式客户端模式讲解

Posted 小毕超

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OAuth2.0 - 简化模式密码模式客户端模式讲解相关的知识,希望对你有一定的参考价值。

一、OAuth2.0

在上篇文章中我们已经对OAuth2.0 做了讲解,以及授权码模式的认证过程,并且搭建了简单的认证服务和资源服务,由于上篇文章中我们只对授权码模式这一种认证登录模式做了讲解,本篇文章对简化模式、密码模式、客户端模式这三种模式进行下演示和讲解,下面是上篇文章的地址:

https://blog.csdn.net/qq_43692950/article/details/122521392

上篇文章的配制中,我们已经将所有的模式都放开给了c1这个客户id,所以在下面模式的演示中我们直接使用上篇文章搭建的项目即可:

二、简化模式


简化模式是相对于授权码模式来说,减少了通过授权码换取Token的步骤。

  1. 资源拥有者打开客户端,客户端要求资源拥有者给予授权,它将浏览器被重定向到授权服务器,重定向时会附加客户端的身份信息

  2. 浏览器出现向授权服务器授权页面,之后将用户同意授权。

  3. 授权服务器将授权码将令牌(access_token)以Hash的形式存放在重定向uri的fargment中发送给浏览器。

一般来说,简化模式用于没有服务器端的第三方单页面应用,因为没有服务器端就无法接收授权码。

特点

  • 简单。流程简单
  • 适用于纯前端应用
  • 不安全。稍有不慎,Token可以被恶意脚本获取
  • Token有效期短,浏览器关闭即失效

浏览器访问:

http://localhost:8020/oauth/authorize?client_id=c1&response_type=token&scope=all&redirect_uri=http://www.baidu.com


在地址栏就可以看到返回的token:

下面使用Token访问资源接口:

三、密码模式

  1. 资源拥有者将用户名、密码发送给客户端
  2. 客户端拿着资源拥有者的用户名、密码向授权服务器请求令牌(access_token)

这种模式十分简单,但是却意味着直接将用户敏感信息泄漏给了client,因此这就说明这种模式只能用于client是我们自己开发的情况下。因此密码模式一般用于我们自己开发的,第一方原生App或第一方单页面应用。

特点:

  • 需要输入账号密码,极度不安全,需要高度信任第三方应用
  • 适用于其他授权模式都无法采用的情况

使用PostMan 发送POST请求:

http://localhost:8020/oauth/token?client_id=c1&client_secret=secret&grant_type=password&username=admin&password=1234


下面使用Token访问资源接口:

四、客户端模式

  1. 客户端向授权服务器发送自己的身份信息,并请求令牌(access_token)
  2. 确认客户端身份无误后,将令牌(access_token)发送给client

这种模式是最方便但最不安全的模式。因此这就要求我们对client完全的信任,而client本身也是安全的。因此这种模式一般用来提供给我们完全信任的服务器端服务。比如,合作方系统对接,拉取一组用户信息。

特点

  • 授权维度为应用维度,而不是用户维度。因此有可能多个用户共用一个Token的情况
  • 适用于应用维度的共享资源

使用PostMan 发送POST请求:

http://localhost:8020/oauth/token?client_id=c1&client_secret=secret&grant_type=client_credentials


下面使用Token访问资源接口:


喜欢的小伙伴可以关注我的个人微信公众号,获取更多学习资料!

以上是关于OAuth2.0 - 简化模式密码模式客户端模式讲解的主要内容,如果未能解决你的问题,请参考以下文章

oauth2.0理解

OAuth2.0 四种授权模式

oauth2.0的授权流程详解

iOS OAuth2.0的使用

在ASP.NET中实现OAuth2.0之了解OAuth

博客园OAuth2.0 授权及用户登录