OAuth2.0 授权许可 之 Authorization Code

写在前面:

在前一篇博客《OAuth2.0 原理简介》中我们已经了解了OAuth2.0的原理以及它是如何工作的,那么本篇我们将来聊一聊OAuth的一种授权许可方式:授权码(Authorization Code)

什么是Authorization Code ?

简单来说授权码就是的在第三方应用程序请求Authrization Server来获取AccessToken之前的预先校验,增加了获取token的安全性。比如你吭哧吭哧写了一天的代码,急于回家吃上一口媳妇做的热饭。当你走到小区门口的时候你需要刷卡才能进入到小区,然后找到你家在哪一栋楼,几单元几号,然后掏出钥匙开门,才能回到家。在这个过程中授权码就相当于是你在用钥匙开门回家的前一步身份确认,如果你不是这个小区的,那你自然是没有办法进入到小区内部的。授权码方式是OAuth2.0最常用的一种授权方式,比如:QQ,豆瓣,新浪微博等用的都是这种方式。

授权码的工作流程解析

上图的流程表示了请求的全过程,需要注意的点是:

发起授权请求需要的参数如下:

对应步骤(C),客户端向Authorization Server发起请求的时候需要提供以下参数:

  1. response_type:必选。值固定为“code”。
  2. client_id:必选参数(第三方应用的标识ID,告诉服务器谁需要得到授权)
  3. state:Client提供的一个字符串,服务器会原样返回给Client。
  4. redirect_uri:必选参数(授权成功后的重定向地址)
  5. scope:可选参数(表示授权范围)

完整URL如下所示:

GET /authorize?response_type=code&client_id=1&state=xyz&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Foauth2&scope=user,photo HTTP/1.1
Host: server.example.com

得到授权返回数据如下:

对应上图中的步骤(E),A授权服务器会返回下面信息:

  1. code:授权码(用于的下一步中请求token使用)
  2. state:步骤(C)中客户端提供的state参数原样返回。

完整的URL如下:

Location: https://client.example.com/oauth2?code=SplxlOBeZQQYbYS6WxSbIA&state=xyz

发起获取token的请求参数如下:

对应步骤(G):

  1. grant_type:必选参数(固定值“authorization_code”)
  2. code : 必选参数(上一步Response 中响应的code,避免在请求的过程中被篡改)
  3. redirect_uri:必选参数(必须和Request中提供的redirect_uri相同)
  4. client_id:必选参数(必须和上一步Request中提供的client_id相同,不能token和授权码请求的第三方应用不一致)

得到token的response包含如下信息:

对应步骤(H):

  1. access_token:访问令牌(服务器端加密过的字符串)。
  2. refresh_token:刷新令牌(刷新令牌的字符串)
  3. expires_in:过期时间(令牌的过期时间)
{
   "access_token":"MJhjskotnFZFEjr1zCsicHJKSLA",
   "token_type":"granttype",
   "expires_in":4800,
   "refresh_token":"JHJhjasdsjhKNSGKmzHDK",
   "example_parameter":"example_value_test"
}

如果有一天你的小区的钥匙被一个陌生人拿到了,那么他就可以名正言顺的进入的小区里面,那么他进入到你家的机会就大了很多。一样的道理,授权码如果被窃取的话,那么对方就可以直接用你的授权码来获取到token从而窃取到你的信息,在使用的时候我们首先要要求授权码不能够被重复使用,如果一旦发现在token的生命周期内授权码被重复使用的话则会强制销毁此授权码生成的所有token,重新再做一次登陆的授权验证。

写在最后:

授权码是我们平时用到的最多的一种授权方式,它使得我们的的应用程序在获取token之前多了一个额外的安全层来保证我们的授权和访问过程是安全可靠的。

参考资料: https://oauth.net/2/grant-types/authorization-code/

原文地址:https://www.cnblogs.com/xiandnc/p/9767658.html

时间: 2024-10-11 00:37:29

OAuth2.0 授权许可 之 Authorization Code的相关文章

京东联盟开发(4) OAuth2.0授权

本文介绍京东联盟开发过程中OAuth2.0授权过程. 一.OAuth2.0定义 权威定义:OAuth is An open protocol to allow secure authorization in a simple and standard method from web, mobile and desktop applications. OAuth是一个开放协议,允许用户让第三方应用以安全且标准的方式获取该用户在某一网站.移动或桌面应用上存储的私密的资源(如用户个人信息.照片.视频.

使用微服务架构思想,设计部署OAuth2.0授权认证框架

1,授权认证与微服务架构 1.1,由不同团队合作引发的授权认证问题 去年的时候,公司开发一款新产品,但人手不够,将B/S系统的Web开发外包,外包团队使用Vue.js框架,调用我们的WebAPI,但是这些WebAPI并不在一台服务器上,甚至可能是第三方提供的WebAPI.同时处于系统安全的架构设计,后端WebAPI是不能直接暴露在外面的:另一方面,我们这个新产品还有一个C/S系统,C端登录的时候,要求统一到B/S端登录,可以从C端无障碍的访问任意B/S端的页面,也可以调用B/S系统的一些API,

OAuth2.0授权登录

最近工作中遇到了多系统间的授权登录,对OAuth2.0进行了学习研究,并总结备忘. [场景] 我们登录一些论坛等网站的时候,如果不想单独注册该网站账号,可以选择用微信或QQ账号进行授权登录. 这样的第三方登录方式到底是怎么实现的呢?难道是腾讯把我们微信或QQ账号信息卖给了这些网站?很显然,腾讯是不会这么干的,这种登录方式的实现,其实就是使用的OAuth2.0的授权登录方式. 类似地,在公司内部,如果公司有多套不同的软件系统,例如公司内网的财务报销系统.考勤系统.报销系统.人事系统等,也可以实现一

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

转自:http://www.cuiyongzhi.com/post/78.html 好长时间没有写文章了,主要是最近的工作和生活上的事情比较多而且繁琐,其实到现在我依然还是感觉有些迷茫,最后还是决定静下心来坚持一开始的选择,继续我们的微信系列文章的后续更新,也希望在自己有时间的时候能把更多的内容呈现给大家,前面一系列的文章讲述了很多微信开发相关的基础知识点 [微信系列文章],那么从这一篇开始将讲述微信较深一层次或者说在产品应用中时刻会用到的一些技术点,那么下面就让我们进入正题吧,这一篇我要讲述的

Spring Security实现OAuth2.0授权服务 - 进阶版

<Spring Security实现OAuth2.0授权服务 - 基础版>介绍了如何使用Spring Security实现OAuth2.0授权和资源保护,但是使用的都是Spring Security默认的登录页.授权页,client和token信息也是保存在内存中的. 本文将介绍如何在Spring Security OAuth项目中自定义登录页面.自定义授权页面.数据库配置client信息.数据库保存授权码和token令牌. 一.引入依赖 需要在基础版之上引入thymeleaf.JDBC.my

OAuth 第三方登录授权码(authorization code)方式的小例子

假如上面的网站A,可以通过GitHub账号登录: 下面以OAuth其中一种方式,授权码(authorization code)方式为例. 一.第三方登录的原理 所谓第三方登录,实质就是 OAuth 授权. 数据的所有者告诉系统,同意授权第三方应用进入系统,获取数据.系统从而产生一个短期的进入令牌(token),用来代替密码,供第三方应用使用. 用户想要登录 A 网站,A 网站让用户提供第三方网站的数据,证明自己的身份.获取第三方网站的身份数据,就需要 OAuth 授权. 这里利用OAuth au

新浪微博Oauth2.0授权认证及SDK、API的使用(Android)

---------------------------------------------------------------------------------------------- [版权申明:本文系作者原创,转载请注明出处] 文章出处:http://blog.csdn.net/sdksdk0/article/details/51939853作者:朱培      ID:sdksdk0      邮箱: [email protected] -------------------------

Oltu在Jersey框架上实现oauth2.0授权模块

oltu是一个开源的oauth2.0协议的实现,本人在此开源项目的基础上进行修改,实现一个自定义的oauth2.0模块. 关于oltu的使用大家可以看这里:http://oltu.apache.org/ 项目可以从这里下载:http://mirror.bit.edu.cn/apache/oltu/org.apache.oltu.oauth2/ 项目中我将四种授权方式都做了实现(授权码模式.简化模式.密码模式及客户端模式),但是这里仅以授权码模式为例,服务端采用Jersey框架实现,而客户端采用s

nodejs实现OAuth2.0授权服务

OAuth是一种开发授权的网络标准,全拼为open authorization,即开放式授权,最新的协议版本是2.0. 举个栗子: 有一个"云冲印"的网站,可以将用户储存在Google的照片,冲印出来.用户为了使用该服务,必须让"云冲印"读取自己储存在Google上的照片. 传统方法是,用户将自己的Google用户名和密码,告诉"云冲印",后者就可以读取用户的照片了.这样的做法有以下几个严重的缺点. "云冲印"为了后续的服务,