您当前的位置:首页 > 电脑百科 > 程序开发 > 移动端 > 小程序

什么是 OAuth 2.0 授权码模式?

时间:2019-08-01 13:34:27  来源:  作者:

原文章 作者:Aaron Parecki

译者:MoCha => 摩卡先生

前言

授权码模式大概是我们所最常见的OAuth 2.0 授权模式。当用户授权给App时,授权码模式就会在网页应用和原生apps中使用到。

本文章是本系列文章中的第一部分,我们将探讨常用的OAuth 2.0 授权模式。如果你想在我们深入之前了解更多有关OAuth 2.0的知识,请查看What the Heck is OAuth?,这篇文章同样能够在Okta开发者博客上找到。

What is an OAuth 2.0 Grant Type? 什么是 OAuth 2.0 授权模式?

在OAuth 2.0 标准中,“授权模式”指的是一种为应用程序获取access token的方式。

OAuth 2.0 定义了好几种授权模式,其中包括“授权码模式”。OAuth 2.0 的扩展同样可以定义一些新的授权模式。

每一种授权模式在对应的一些特殊用例中都有着最佳实践,例如:web app,原生 app,一些无法启动web浏览器的设备,或者是服务器端到服务器端的应用程序。

The Authorization Code Flow 授权码模式的流程

授权码授权模式被用于web应用以及手机app中。与大多数授权模式不同,授权码模式会在一开始就请求应用去启动浏览器来进行一系列操作。更深入点说,授权码模式的流程有以下步骤:

  • 应用程序打开浏览器,将用户连接到OAuth的服务端中
  • 用户会看到授权提示以及是否同意应用的请求
  • 用户被重定向回到应用程序中,同时在请求栏中携带着授权码字符串
  • 应用程序为了获取access token而进行交换授权码的操作

Get the User’s Permission 获取用户权限

OAuth 旨在让用户能够授予应用程序特定的受限访问权限。应用程序首先会确定需要请求的权限,之后会将用户传送至对应的浏览器中以获得他们的许可。为了开启授权流程,应用程序会构造类似以下格式的URL,并且通过浏览器进行访问。

https://authorization-server.com/auth
 ?response_type=code
 &client_id=29352915982374239857
 &redirect_uri=https%3A%2F%2Fexample-app.com%2Fcallback
 &scope=create+delete
 &state=xcoiv98y2kd22vusuye3kch

下面是有关请求参数的说明:

  • response_type=code告诉授权服务器,应用正在初始化授权流程
  • client_id 应用程序的公共标识,将在开发者首次注册应用时获得
  • redirect_uri 告诉授权服务器当用户同意应用的请求后应该将用户返回到何处
  • scope 一个或多个以空格分隔的字符串,用于指示应用程序请求的权限。在使用具体的OAuth API时,我们将指定所支持作用域。
  • state 应用程序将生成一个随机字符串并包含在请求中,我们应该对用户授权应用程序后是否返回相同的值进行检查。这是为了防止 CSRF attacks.

当用户访问此URL时,授权服务器会提示用户,询问他们是否要授权此应用程序的请求。

什么是 OAuth 2.0 授权码模式?

 

Redirect Back to the Application 重定向回到应用程序

如果用户同意授权,那么授权服务器将重定向回到指定的redirect_uri ,并且携带着code以及state

例如,用户将重定向回到以下URL:

https://example-app.com/redirect
 ?code=g0ZGZmNjVmOWIjNTk2NTk4ZTYyZGI3
 &state=xcoiv98y2kd22vusuye3kch

state的值将会和应用程序刚初始请求时设置的一样。但应用程序应当检查重定向中的state是否与最初设置的state一致

code是通过授权服务器生成的授权码,授权码相对来说存活时间是短暂的,在依赖OAuth服务的情况下,一般存活在1~10分钟。

Exchange the Authorization Code for an Access Token 为了获取Access Token 进行的授权码交换

我们即将要结束授权的流程啦。现在应用程序有了授权码,我们可以用它来获取Access Token。

应用程序将会通过以下步骤发起POST请求到服务令牌终端:

  • grant_type=authorization_code 告诉令牌终端,应用程序正在使用授权码模式。
  • code 重定向回来后,应用程序所携带的授权码。
  • redirect_uri 与请求授权码时设置的重定向URL一样。有些API不需要该请求参数,所以在使用之前应当仔细查阅想要使用API的文档。
  • client_id 应用程序的客户端ID。
  • client_secret 应用程序的客户端secret。确保获取到access token是来自该应用程序的,而不是那些有可能拦截授权码的潜藏攻击者。

令牌终端将验证请求中的所有参数,确保授权码不会过期以及客户端ID和客户端secret是匹配的。如果一切的检查顺利,没有问题,那么将会生成一个access token响应回去!

HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{
 "access_token":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3",
 "token_type":"bearer",
 "expires_in":3600,
 "refresh_token":"IwOGYzYTlmM2YxOTQ5MGE3YmNmMDFkNTVk",
 "scope":"create delete"
}

这就是完整的授权流程啦!现在应用程序有了access token,那么就可以调用相关API进行请求啦。

When to use the Authorization Code Flow 什么时候该使用授权码

在使用web应用或者是手机应用中,授权码模式将是最好的选择。由于授权码模式在获取access token上额外进行了交换授权码的步骤,因此提供了一种隐式授权模式所没有的安全层。

如果你正在手机应用上使用授权码模式,或者无法存储客户端secret的其他任何类型应用程序,那么你应该使用PKCE extension ,它会提供可能拦截授权码的其他攻击的保护。

交换授权码的步骤确保攻击者无法拦截access token,这是因为access token总是通过应用程序与OAuth服务器之间的安全反向通道传输。



Tags:OAuth   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
最开始接触 OAuth2.0 的时候,经常将它和 SSO单点登录搞混。后来因为工作需要,在项目中实现了一套SSO,通过对SSO的逐渐了解,也把它和OAuth2.0区分开了。所以当时自己也整理了一篇...【详细内容】
2021-09-16  Tags: OAuth  点击:(68)  评论:(0)  加入收藏
授权和认证是每个项目中不可或缺的一部分,脆弱的授权、认证流程会在恶意攻击中不堪一击,会在项目运行过程中无法承受高流量的冲击。在这个环节中,OAuth 认证、SSO 单点登录、CA...【详细内容】
2021-05-26  Tags: OAuth  点击:(252)  评论:(0)  加入收藏
先总结一下现阶段网站开发中网络安全登录方面的几种架构。本人擅长的是java语言的,所以文章中大部分写的java方面的相关技术。第一种:前后端不分离的模式,像以前的spring+jsp、...【详细内容】
2021-05-07  Tags: OAuth  点击:(217)  评论:(0)  加入收藏
本文开始讲springsecurity框架登录认证授权的一些知识点。为什么没有说shiro这个框架,主要是现在大部分的主流项目中,特别是前后端分离的项目中权限框架一般都用的是springsec...【详细内容】
2021-05-07  Tags: OAuth  点击:(218)  评论:(0)  加入收藏
这篇文章主要是vue前端内容,对接后端进行登录认证。对应这上一篇springsecurity认证,包括以后的系列文章中会有的spring-security-oauth2后端认证,同样都适用。跟上一篇一样,首...【详细内容】
2021-05-07  Tags: OAuth  点击:(198)  评论:(0)  加入收藏
前言微服务架构下统⼀认证思路主要有两种形式:1、基于 Session 的认证⽅式在分布式的环境下,基于 session 的认证会出现⼀个问题,每个应⽤服务都需要在session中存储⽤户身份信...【详细内容】
2021-04-07  Tags: OAuth  点击:(252)  评论:(0)  加入收藏
单点登录实现中,系统之间的协议对接是非常重要的一环,一般涉及的标准协议类型有 CAS、OAuth、OpenID Connect、SAML,本文将对四种主流 SSO协议进行概述性的介绍,并比较其异同,读...【详细内容】
2020-11-10  Tags: OAuth  点击:(224)  评论:(0)  加入收藏
介绍OAuth(开放授权)是一个开放标准,允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方应用或分享他们数据的所有内容。OAuth...【详细内容】
2020-08-18  Tags: OAuth  点击:(65)  评论:(0)  加入收藏
现在大部分的网络应用,登录、注册、密码加密保存、token 管理等功能都是必要的。为了让用户的隐私更能得到保障,使用起来更方便,OAuth 协议和单点登录系统也就应运而生。今天...【详细内容】
2020-08-17  Tags: OAuth  点击:(81)  评论:(0)  加入收藏
本文由 Haseeb Anwar 发表在 medium,经原作者授权由 InfoQ 中文站翻译并分享。我们都在网站或者手机应用中见过“谷歌登陆”和“绑定 Facebook“这样的按钮。如果你点击这个...【详细内容】
2020-07-16  Tags: OAuth  点击:(53)  评论:(0)  加入收藏
▌简易百科推荐
一、项目背景随着小程序在用户规模和商业化上取得的极大成功,各大平台都推出了自己的小程序。然而这些平台的小程序开发在语法上又不尽相同,不同平台小程序代码的维护需要投入...【详细内容】
2021-11-05  携程技术    Tags:小程序   点击:(65)  评论:(0)  加入收藏
作者:灰灰来源:JS每日一题 一、背景传统的web开发实现登陆功能,一般的做法是输入账号密码、或者输入手机号及短信验证码进行登录服务端校验用户信息通过之后,下发一个代表登录态...【详细内容】
2021-10-29  Nodejs开发    Tags:微信小程序   点击:(43)  评论:(0)  加入收藏
总结列举微信小程序开放能力清单 硬件能力 蓝牙 NFC读写 连接WIFI设备 开放能力 ...【详细内容】
2021-09-27  软件开发分享    Tags:微信小程序   点击:(60)  评论:(0)  加入收藏
核心商城(CoreShop)介绍核心小程序商城系统(CoreShop) 是基于 Asp.Net 5.0、Uni-App开发、支持可视化布局的小程序商城系统;前后端分离,支持分布式部署,跨平台运行;拥有分销、代理、...【详细内容】
2021-07-20  码农也有梦想    Tags:小程序商城   点击:(115)  评论:(0)  加入收藏
介绍Vue3发布已经有一段时间了,从目前来看,其生态还算可以,也已经有了各种组件库给予了支持,但是不管是Vue3还是Vue2都无法直接用来开发小程序,因此国内一些技术团队针对Vue开发...【详细内容】
2021-07-13  爱分享Coder    Tags:小程序   点击:(204)  评论:(0)  加入收藏
首先明确几个概念1. W3C:指万维网联盟(World Wide Web Consortium),是一个国际的标准的制定机构。2. H5(HTML5,HyperText Markup Language 5的缩写),HTML5 是由W3C制定的新HTML标...【详细内容】
2021-07-06  畅游零和一的海洋    Tags:微信小程序   点击:(153)  评论:(0)  加入收藏
在开发微信公众号时,需要不时请求URL和数据封装。为了不做重复的工作。提取公共部分进行封装。产生了相应的公众类。今天先来写下请求类,代码如下:public class HttpRequestP...【详细内容】
2021-06-16  java浮萍  今日头条  Tags:公共类   点击:(134)  评论:(0)  加入收藏
小程序上线后,改版了很多次,包括一些 Api 接口也有改动。如果你学习一个很久之前的小程序项目是没有意义的,本文推荐的小程序都是最近有更新的。相信在你学习、部署的过程中,不...【详细内容】
2021-06-08    程序猿久一  Tags:微信小程序   点击:(207)  评论:(0)  加入收藏
自从2019年微信公开课Pro在微信之夜演示《跳一跳》以来,微信小游戏已经不知不觉走过的三年,这三年中我们可以明显看到微信对小游戏的扶持,对于微信开发者来说,微信小游戏开发以...【详细内容】
2021-05-25  开课吧科科  今日头条  Tags:微信小游戏   点击:(212)  评论:(0)  加入收藏
学习编程从hello world开始。学习微信小程序开发首先要安装一个微信开发者工具,官网上免费下载童叟无欺,下载完傻瓜式安装即可。 双击微信开发者工具,然后选择小程序,然后点击...【详细内容】
2021-05-12  程序员fearlazy  fearlazy  Tags:微信小程序   点击:(268)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条