OAuth 2.0定义了四种授权方式

  • 授权码模式(authorization code)
  • 简化模式(implicit)
  • 密码模式(resource owner password credentials)
  • 客户端模式(client credentials)

    授权码模式是功能最完整、流程最严密的授权模式,本篇也是主要去理解这种模式

授权码模式大概分为 5 个步骤

  • 客户端(Client)向服务提供商(HTTP service)申请创建客户端(Client_id、Client_Secret)。
  • 用户(Resource Owner)通过浏览器(User Agent)打开后,跳转到授权页,客户端要求用户授权。
  • 用户同意给予客户端授权,返回授权码(Code)。
  • 客户端通过授权码,向认证服务器(Authorization server)申请令牌(Access Token)。
  • 客户端通过令牌,向资源服务器(Resource server)获取资源。
1. 获取Code
response_type:表示授权类型,必选项,此处的值固定为"code"
client_id:表示客户端的ID,必选项
redirect_uri:表示重定向URL,可选项
scope:表示申请的权限范围,可选项
state:表示客户端的当前状态,可以指定任意值,认证服务器会原封不动地返回这个值。
2. 返回Code(用户授权通过后返回到重定向URL)
code:表示授权码,必选项。
state:如果客户端的请求中包含这个参数,认证服务器的回应也必须一模一样包含这个参数。
3. 客户端向认证服务器申请Access Token
grant_type:表示使用的授权模式,必选项,此处的值固定为"authorization_code"。
code:表示获得的授权码,必选项。
redirect_uri:表示重定向URI,必选项,且必须与上面中的该参数值保持一致。
client_id:表示客户端ID,必选项。
client_secret : 表示客户端密钥,必选项。
4. 认证服务器返回Access Token
access_token:表示访问令牌,必选项。
token_type:表示令牌类型,该值大小写不敏感,必选项,可以是bearer类型或mac类型。
expires_in:表示过期时间,单位为秒。如果省略该参数,必须其他方式设置过期时间。
refresh_token:表示更新令牌,用来获取下一次的访问令牌,可选项。
scope:表示权限范围,如果与客户端申请的范围一致,此项可省略。
5. 向资源服务器获取信息
headers.Accept : media类型,固定值 “application/json”
headers.Authorization 授权,值为返回的token_type + 空格 + access_token

疑问

1. 获取code时,只传递了clent_id,redirect_url等值,服务提供商是怎么知道是哪个用户授权?

授权时,你已经登录了服务提供商的网站或者会要求你登录。

2. 客户端是怎么知道你已经授权?

授权请求发出后,浏览器得到的是一个http的重定向响应,这个地址是你的redirect_url,同时返回code值

3. 为什么要设置获取code后再去获取access_token

是为了安全性,直接通过重定向传回access_token,但是HTTP 302是不安全的, 攻击者有可能会获取到access_token,而code不能获取资源,即使被截取也没什么用,client通过HTTPS以及密钥来获取access_token,以保证安全。

为什么不直接用HTTPS重定向回client

不是所有client都支持HTTPS,为了通用性 和安全性,才衍生出来这么一个code。

单点登录 - OAuth 2.0 授权码模式(一)的更多相关文章

  1. OAuth 2.0 授权码请求

    关于OAuth 2.0,请参见下面这两篇文章(墙裂推荐): <OAuth 2.0> <Spring Security OAuth 2.0> 纸上得来终觉浅,绝知此事要躬行.理论 ...

  2. OAuth2.0授权码模式实战

    OAuth2.0是目前比较流行的一种开源授权协议,可以用来授权第三方应用,允许在不将用户名和密码提供给第三方应用的情况下获取一定的用户资源,目前很多网站或APP基于微信或QQ的第三方登录方式都是基于O ...

  3. 学习Spring Security OAuth认证(一)-授权码模式

    一.环境 spring boot+spring security+idea+maven+mybatis 主要是spring security 二.依赖 <dependency> <g ...

  4. oauth2.0授权码模式详解

    授权码模式原理 授权码模式(authorization code)是功能最完整.流程最严密的授权模式.它的特点就是通过客户端的后台服务器,与"服务提供商"的认证服务器进行互动. 它 ...

  5. OAuth2.0授权码模式

    OAuth2.0简单说就是一种授权的协议,OAuth2.0在客户端与服务提供商之间,设置了一个授权层(authorization layer).客户端不能直接登录服务提供商,只能登录授权层,以此将用户 ...

  6. 分享一个单点登录、OAuth2.0授权系统源码(SimpleSSO)

    SimpleSSO 关于OAuth 2.0介绍: http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html 系统效果: 登录界面: 首页: 应用界面: ...

  7. OAuth 2.0之授权码模式

    转载自:http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html OAuth 2.0授权码模式 授权码模式(authorization code)是功 ...

  8. asp.net权限认证:OWIN实现OAuth 2.0 之授权码模式(Authorization Code)

    asp.net权限认证系列 asp.net权限认证:Forms认证 asp.net权限认证:HTTP基本认证(http basic) asp.net权限认证:Windows认证 asp.net权限认证 ...

  9. Oauth2.0认证---授权码模式

    目录: 1.功能描述 2.客户端的授权模式 3.授权模式认证流程 4.代码实现 1.功能描述 OAuth在"客户端"与"服务提供商"之间,设置了一个授权层(au ...

随机推荐

  1. laravel 5.5 运行在 php7.0 报错 Symfony\Component\Translation\Translator.php FatalThrowableErrorParse error: syntax error, unexpected '?', expecting variable (T_VARIABLE)

    问题描述 报错原因是 php-cli 版本是 7.1.x,运行 composer create-project ... 命令时安装的依赖包会自动适配到当前 php 版本 7.1.x.如果 php-fp ...

  2. Hyper-V虚拟机win7网络红叉,无法上网解决方法

    之前一直都是玩Vmware虚拟机,后来win8之后的系统有Hyper-V虚拟机就开始接触了. Windows 中内置的Hyper-V管理器可以说是给很多人带来了惊喜!至少运行的流畅程度要比Vmware ...

  3. CSS样式手册

    字体属性:(font) 大小 {font-size: x-large;}(特大) xx-small;(极小) 一般中文用不到,只要用数值就可以,单位:PX.PD 样式 {font-style: obl ...

  4. js中try、catch、finally的执行规则

    首先一个常识就是,在浏览器执行JS脚本过程中,当出现脚本错误,并且你没有手动进行异常捕捉时,他会在浏览器下面出现黄色的叹号,这是正常的,这也不是最重要的,最重要的是,出错行以下的所有JS代码将中停执行 ...

  5. 如何使用Externalizable接口自定义Java中的序列化

    Java序列化过程的缺点 我们都知道如何使用Serializable接口序列化/反序列化一个对象,并且如何使用writeObject 和readObject方法自定义序列化过程. 但是这些自定义还不够 ...

  6. RF作用与目的

    robotframework自动化原理:通过ride工具编写脚本,加载指定的UI测试库,再通过pybot程序去运行指定脚本,调用浏览器驱动,打开浏览器,操作浏览器页面元素,达到模拟用户操作的行为 为什 ...

  7. 奇淫异巧之 PHP 后门

    整理大部分来源信安之路 对于隐蔽来说,有以下几点要素: 1.熟悉环境,模拟环境,适应环境,像一只变色龙一样隐藏 2.清除痕迹,避免运维发现 3.避免后门特征值被 D 盾等工具检测到 姿势 一般过狗思路 ...

  8. [CF722C] Destroying Array

    C. Destroying Array time limit per test 1 second memory limit per test 256 megabytes input standard ...

  9. [BZOJ1833][ZJOI2010]数字计数

    Description 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. Input 输入文件中仅包含一行两个整数a.b,含义如上所述. Output 输出文 ...

  10. stm32cubeMX配置LWIP

    MCU:stm32f769NIHx  PHY:LAN8742A LWIP_VERSION:2.0.3 1.配置RCC,串口(printf debug log) (1)开启RCC,配置时钟系统 图1.1 ...