oauth2基本概念

Posted 我就是个菜鸟2021

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oauth2基本概念相关的知识,希望对你有一定的参考价值。

1.什么是oauth2

  1. OAuth2.0介绍 OAuth(Open Authorization)是一个关于授权(authorization)的开放网络标准,允许用户授权第三方 应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他 们数据的所有内容。OAuth在全世界得到广泛应用,目前的版本是2.0版。
  2. OAuth协议:https://tools.ietf.org/html/rfc6749 协议特点:简单:不管是OAuth服务提供者还是应用开发者,都很易于理解与使用; 安全:没有涉及到用户密钥等信息,更安全更灵活; 开放:任何服务提供商都可以实现OAuth,任何软件开发商都可以使用OAuth;

2.为什么用oauth2

业务系统 需要实现几种登录形式

  1. 原生app授权 app登录请求后台接口,为了安全认证,所有请求都带token信息,如果登录验证、 请求后台数据。
  2. 前后端分离单页面应用:前后端分离框架,前端请求后台数据,需要进行oauth2安全认证,比如 使用vue、react后者h5开发的app
  3. 第三方应用授权登录,比如QQ,微博,微信的授权登录。

3.怎么用oauth2

4.oauth中的角色

OAuth 定义了四个角色:

4.1 Resource owner 资源拥有者(用户)

能够授予对受保护资源的访问权限的实体。当资源所有者是一个人时,它被称为最终用户

Resource Server 资源服务器

托管受保护资源的服务器,能够使用访问令牌接受和响应受保护资源请求

Client 客户端

代表资源所有者并经其授权发出受保护资源请求的应用程序。“客户”一词确实 不暗示任何特定的实现特征(例如, 应用程序是否在服务器、桌面或其他 设备上执行)。

Authorization server 授权服务器

服务器在成功 验证资源所有者并获得授权后向客户端颁发访问令牌。授权服务器和资源服务器之间的交互超出了本规范的范围。授权服务器 可以是与资源服务器相同的服务器,也可以是单独的实体。 单个授权服务器可以发布多个资源服务器接受的访问令牌。

5.认证流程参考

6.Oauth2 的四种认证模式的流程

6.1 Authorization Code (授权码模式)

应用场景

这种方式是最常用的流程,安全性也最高,它适用于那些有后端的 Web 应用。授权码通过前端传送,令牌则是储存在后端,而且所有与资源服务器的通信都在后端完成。这样的前后端分离,可以避免令牌泄漏

流程


1:用户访问页面
2:访问的页面将请求重定向到认证服务器
3:认证服务器向用户展示授权页面,等待用户授权
4:用户授权,认证服务器生成一个code和带上client_id发送给应用服务器
然后,应用服务器拿到code,并用client_id去后台查询对应的client_secret
5:将code、client_id、client_secret传给认证服务器换取access_token和
refresh_token
6:将access_token和refresh_token传给应用服务器
7:验证token,访问真正的资源页面

6.2 Resource Owner Password Credentials Grant(密码模式)

应用场景

如果你高度信任某个应用,RFC 6749 也允许用户把用户名和密码,直接告诉该应用。该应用就使用你的密码,申请令牌,这种方式称为"密码式"(password)

流程


1:用户访问用页面时,输入第三方认证所需要的信息(QQ/微信账号密码)
2:应用页面那种这个信息去认证服务器授权
3:认证服务器授权通过,拿到token,访问真正的资源页面

6.3 Implicit Grant (隐式授权模式)

应用场景

有些 Web 应用是纯前端应用,没有后端。这时就不能用上面的方式了,必须将令牌储存在前端。RFC 6749 就规定了第二种方式,允许直接向前端颁发令牌。这种方式没有授权码这个中间步骤,所以称为(授权码)“隐藏式”(implicit)

流程

1:用户访问页面时,重定向到认证服务器。
2:认证服务器给用户一个认证页面,等待用户授权。
3:用户授权,认证服务器想应用页面返回Token
4:验证Token,访问真正的资源页面

6.4 Client Credentials Grant (客户端凭证模式)

应用场景

适用于没有前端的命令行应用,即在命令行下请求令牌

流程


1:用户访问应用客户端
2:通过客户端定义的验证方法,拿到token,无需授权
3:访问资源服务器A
4:拿到一次token就可以畅通无阻的访问其他的资源页面
如果你高度信任某个应用,RFC 6749 也允许用户把用户名和密码,直接告诉该应用。该应用就使用你的密码,申请令牌,这种方式称为"密码式"(password)

7 刷新token原理

OAUTH2.0基础概念篇

一、OAuth2.0概述

    OAuth2.0是一种授权机制。资源所有者告诉系统同意授权第三方应用进入系统,获取这些数据。系统从而产生一个短期的访问令牌(token),用来代替密码,供第三方应用使用。举个例子,你想登录有道云使用云笔记,但你从来没注册过有道账号,又不想新注册一个再使用有道,怎么办呢?不用担心,有道已经为你这种懒人做了准备,用你的qq号可以授权给有道进行登录。

二、OAuth2.0的授权模式

●授权码模式(Authorization code):授权码模式是目前最常见的一种授权模式, 适用于所有有Server端的应用,如Web站点、有Server端的手机客户端

简化模式(Implicitly Grant):结合移动应用或 Web App 使用

●密码模式(Resource owner password credentials):适用于受信任客户端应用,例如同个组织的内部或外部应用

●客户端模式(Client credentials):适用于客户端调用主服务API型应用(比如百度API Store)

三、OAuth2.0名词定义

●Third-party application:第三方应用程序,本文中又称"客户端"(client),即下例子中的"有道云笔记"。

●HTTP service:HTTP服务提供商,本文中简称"服务提供商",即下例中的QQ。

●Resource Owner:资源所有者,本文中又称"用户"(user)。

●User Agent:用户代理,本文中就是指浏览器。

●Authorization server:认证服务器,即服务提供商专门用来处理认证的服务器。

●Resource server:资源服务器,即服务提供商存放用户生成的资源的服务器。它与认证服务器,可以是同一台服务器,也可以是不同的服务器。

四、客户端应用注册

    在应用 OAuth 2 之前,你必须在授权方服务中注册你的应用。诸如此类 OAuth 实现平台中一般都要求开发者提供如下所示的授权设置项。

●应用名称

●应用网站

    应用注册成功后,授权方服务将以client id和client secret的形式为应用发布client credentials(客户端凭证)。client id是公开透明的字符串,授权方服务使用该字符串来标识应用程序,并且还用于构建呈现给用户的授权 url 。当应用请求访问用户的帐户时,client secret用于验证应用身份,并且必须在客户端和服务之间保持私有性。


以上是关于oauth2基本概念的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security Oauth2架构学习

通过微信扫码登录剖析 oauth2 认证授权技术

通过微信扫码登录剖析 oauth2 认证授权技术

Spring Security OAuth2.0认证授权介绍

Java微信公众平台开发(十六)--微信网页授权(OAuth2.0授权)获取用户基本信息

SpringBoot 基于 OAuth2 统一身份认证流程详解