OAuth 2.0: Bearer Token Usage

Bearer Token (RFC 6750) 用于OAuth 2.0授权访问资源,任何Bearer持有者都可以无差别地用它来访问相关的资源,而无需证明持有加密key。一个Bearer代表授权范围、有效期,以及其他授权事项;一个Bearer在存储和传输过程中应当防止泄露,需实现Transport Layer Security (TLS);一个Bearer有效期通常很短,最好不超过1小时。

 一. 资源请求

  Bearer实现资源请求有三种方式:Authorization Header、Form-Encoded Body Parameter、URI Query Parameter,这三种方式优先级依次递减

  • Authorization Header:该头部定义与Basic方案类似

    GET /resource HTTP/1.1
    Host: server.example.com
    Authorization: Bearer mF_9.B5f-4.1JqM
  • Form-Encoded Body Parameter: 下面是用法实例

    POST /resource HTTP/1.1
    Host: server.example.com
    Content-Type: application/x-www-form-urlencodedaccess_token=mF_9.B5f-4.1JqM

    使用该方法发送Bearer须满足如下条件:

    1.头部必须包含"Content-Type: application/x-www-form-urlencoded"
    2.entity-body必须遵循application/x-www-form-urlencoded编码(RFC 6749)
    3.如果entity-body除了access_token之外,还包含其他参数,须以"&"分隔开
    4.entity-body只包含ASCII字符
    5.要使用request-body已经定义的请求方法,不能使用GET

    如果客户端无法使用Authorization请求头,才应该使用该方法发送Bearer

  • URI Query Parameter

    GET /resource?access_token=mF_9.B5f-4.1JqM HTTP/1.1
    Host: server.example.com
    Cache-Control: no-store

    服务端应在响应中使用 Cache-Control: private

 

二. WWW-Authenticate头

  在客户端未发送有效Bearer的情况下,即错误发生时,资源服务器须发送WWW-Authenticate头,下为示例:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="example", error="invalid_token", error_description="The access token expired"

  下面将就WWW-Authenticate字段的用法进行详细描述(下列这些属性/指令不应重复使用):

  • Bearer:Beare作为一种认证类型(基于OAuth 2.0),使用"Bearer"关键词进行定义

  • realm:与Basic、Digest一样,Bearer也使用相同含义的域定义reaml

  • scope:授权范围,可选的,大小写敏感的,空格分隔的列表(%x21 / %x23-5B / %x5D-7E),可以是授权服务器定义的任何值,不应展示给终端用户。OAuth 2.0还规定客户端发送scope请求参数以指定授权访问范围,而在实际授权范围与客户端请求授权范围不一致时,授权服务器可发送scope响应参数以告知客户端下发的token实际的授权范围。下为两个scope用法实例:

    scope="openid profile email"
    scope="urn:example:channel=HBO&urn:example:rating=G,PG-13"
  • error:描述访问请求被拒绝的原因,字符%x20-21 / %x23-5B / %x5D-7E之内

  • error_description:向开发者提供一个可读的解释,字符%x20-21 / %x23-5B / %x5D-7E之内

  • error_uri:absolute URI,标识人工可读解释错误的页面,字符%x21 / %x23-5B / %x5D-7E之内

  当错误发生时,资源服务器将发送的HTTP Status Code(通常是400, 401, 403, 或405)及Error Code如下:

  • invalid_request:请求丢失参数,或包含无效参数、值,参数重复,多种方法发送access token,畸形等。资源服务器将发送HTTP 400 (Bad Request)

  • invalid_token:access token过期、废除、畸形,或存在其他无效理由的情况。资源服务器将发送HTTP 401 (Unauthorized),而客户端则需要申请一个新的access token,然后才能重新发送该资源请求

  • insufficient_scope:客户端提供的access token的享有的权限太低。资源服务器将发送HTTP 403 (Forbidden),同时WWW-Authenticate头包含scope属性,以指明需要的权限范围

  如果客户端发送的资源请求缺乏任何认证信息(如缺少access token,或者使用 RFC 6750 所规定的三种资源请求方式之外的任何method),资源服务器不应该在响应中包含错误码或者其他错误信息,如下即可:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="example"

  

三. Bearer Token Response

  下为示例:

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache{"access_token":"mF_9.B5f-4.1JqM","token_type":"Bearer","expires_in":3600,"refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA"
}

四. 安全威胁

  • Token 伪造/修改(Token manufacture/modification):攻击者伪造或修改已有的token,导致资源服务器授权通过非法访问的客户端。因此需要对token使用数字签名或消息认证码来token的完整性

  • Token 泄露(Token disclosure):Token本身可能包含认证、有效期等敏感信息。因此实现TLS并验证证书是必选项,加密token可用于防止客户端观察token的内容,加密token还可防止token在前端服务器和后端服务器(如果他们没有启用TLS)之间发生泄露

  • Token 改寄(Token redirect):攻击者用一个访问A资源服务器的token去请求B资源服务器的资源。因此通常token中可以包含代表资源服务器的标识来防止这种情况的发生

  • Token 重放(Token replay):攻击者企图使用曾经使用过的token来请求资源。因此token需包含有效期(比如少于1小时)

   另外cookie不能包含token,关于cookie的安全弱点,RFC 6265 中有如下描述:

  A server that uses cookies to authenticate users can suffer securityvulnerabilities because some user agents let remote parties issueHTTP requests from the user agent (e.g., via HTTP redirects or HTMLforms).  When issuing those requests, user agents attach cookies evenif the remote party does not know the contents of the cookies,potentially letting the remote party exercise authority at an unwaryserver.

可见即使服务端实现了TLS,攻击者依旧可以利用cookie来获取机密信息,如果cookie中包含机密信息的话;对此,不得已可将机密信息包含于URLs(前提是已实现了TLS),但尽量使用更安全的办法,因为浏览器历史记录、服务器日志等可能泄露URLs机密信息。

五. Transport Layer Security (TLS)

  TLS (SSL / TLS)源于NetScape设计的SSL(Secure Sockets Layer,1994 / SSL 1.0、1995 / SSL 2.0、1996 / SSL 3.0);1999年,IETF接替NetScape,发布了SSL的升级版TLS 1.0,最新为TLS 1.3(draft),TLS 用于在两个通信应用程序之间提供保密性和数据完整性。目前,应用最广泛的是TLS 1.0,接下来是SSL 3.0,主流浏览器都已经实现了TLS 1.2的支持。TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3。获取更多信息可参考 TLS 1.2 / RFC 5246 。

  TLS是一种位于传输层(TCP)和应用层之间的协议层,由记录协议(Record Layer)和握手协议(Handshake Layer)两层构成:

   

 

六. application/x-www-form-urlencoded Media Type

  首先这种编码类型未考虑非US-ASCII字符的情况,因此待发送的内容(包括名称、值)可先经UTF-8编码,然后再按字节序列进行转义;接收这种数据类型则需进行逆向处理。通常各种web编程语言已经提供原生URL编码/URL解码组件,使用起来也极为方便,因此这里不做详细介绍。

原文地址:http://www.cnblogs.com/XiongMaoMengNan/p/6785155.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/325627.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot 核心配置文件详解

转载自 Spring Boot 核心配置文件详解 用过 Spring Boot 的都知道在 Spring Boot 中有以下两种配置文件 bootstrap (.yml 或者 .properties) application (.yml 或者 .properties) 为什么会有这两种配置文件呢?大家都清楚它们的区别和具体使用场景吗&#xff1…

Net分布式系统之:微服务架构

一、背景&问题 之前框架是一个基于SOA思想设计的分布式框架。各应用通过服务方式提供使用,服务之间通信是RPC方式调用,具体实现基于.NET的WCF通信平台。框架存在如下2个问题: 1、高并发处理能力不足。一当高并发请求,可能出现…

[Cake] 0.C#Make自动化构建-简介

0. Cake是什么? Cake是C# Make的缩写,是一个基于C# DSL的自动化构建系统。它可以用来编译代码,复制文件以及文件夹,运行单元测试,压缩文件以及构建Nuget包等等。 熟悉大名鼎鼎的Make的小伙伴,应该已经知道…

99%的面试官都会问到的Java面试题

转载自 99%的面试官都会问到的Java面试题 最近是招聘季,所谓金九银十,正是跳槽的好几节。今天,给大家整理了一些Java面试常考的经典题目,我们一道一道来分析一下。 经典面试题 1、谈谈你对 Java 平台的理解?“Java …

想对你们每个人说的话

135编辑器1吉方鑫:方鑫,在我和王老师面前,你永远都是那么的乖,爱笑,常言道:爱笑的人运气不会太差,希望你也是如此哦,现在的学业已经到了三期了,相信你也知道后期的学习该…

Dora.Interception: 一个为.NET Core度身定制的AOP框架

多年从事框架设计开发使我有了一种强迫症,那就是见不得一个应用里频繁地出现重复的代码。之前经常Review别人的代码,一看到这样的程序,我就会想如何将这些重复的代码写在一个地方,然后采用“注入”的方式将它们放到需要的程序中。…

揭秘阿里秒级百万TPS平台架构实现

转载自 揭秘阿里秒级百万TPS平台架构实现 导读:搜索离线数据处理是一个典型的海量数据批次/实时计算结合的场景,阿里搜索中台团队立足内部技术结合开源大数据存储和计算系统,针对自身业务和技术特点构建了搜索离线平台,提供复杂…

相对你们说的一些话

135编辑器1田文豪:文豪,最近上课我看你很认真,面试题也背的挺好的,你在很努力的学习了,这是一个非常好的趋势,希望你能一直保持下去。你的脑字也是很灵活的,好几次考试都超出了我的预想&#xf…

Build 2017 | 一文看懂微软 Build 2017 大会:让 AI 走向边缘

200 多家明星企业,20 位著名投资机构顶级投资人共同参与!「新智造成长榜」致力于发掘 AI 领域有 “三年十倍” 成长潜力的创新公司,下一波 AI 独角兽,会有你么?点击阅读原文了解详情! 雷锋网按:…

一文带你理解Java中Lock的实现原理

转载自 一文带你理解Java中Lock的实现原理 当多个线程需要访问某个公共资源的时候,我们知道需要通过加锁来保证资源的访问不会出问题。java提供了两种方式来加锁,一种是关键字:synchronized,一种是concurrent包下的lock锁。syn…

请19级的童鞋们接收一下

135编辑器1李磊:磊,假期过的可好?有没有人在写作业呀?通过这段时间的学习,可以看得出你对我们的课程兴趣浓厚,尤其是scratch,自己做了好多的案例,之前还以为你们都是从网上直接下载的…

微软Build 2017首日主角AI 同时发布.NET Core 2.0 Preview 1

软公司一年一度的开发者大会,即“Microsoft Build 2017”在总部西雅图正式开幕。按照官方安排,本次大会将持续 3 天,主题围绕微软公司各项最新技术成果的展示和研讨,包括与微软相关的产业界人士的沟通和互动,以及对未来…

彻底理解HashMap的元素插入原理

转载自 彻底理解HashMap的元素插入原理 HashMap,是Java语言中比较基础也比较重要的一种数据结构,由于其用途广泛,所以,Java的工程师在设计HashMap的时候考虑了很多因素。 通过阅读HashMap的源码,可以学习到很多知识…

使用C#操作XML文件

今天更新一篇技术文章&#xff0c;使用C#实现对XML的操作&#xff1a;首先需要准备一个测试的XML文件&#xff0c;我这边命名为test.xml:文件内容为&#xff1a;<test><id>1</id><name>张三</name><age>18</age><id>2</id&…

Linux使用Jexus托管Asp.Net Core应用程序

第一步 安装.Net Core环境 安装 dotnet 环境参见官方网站 https://www.microsoft.com/net/core。 选择对应的系统版本进行安装。安装完成过后 输入命令查看版本&#xff0c;目前最新版为 1.04&#xff1a; dotnet --version 此时已经可以发布Asp.Net Core应用程序到Linux上…

优秀学生专栏——董超

优秀学生--董超今天回访了下17级优秀学生董超同学&#xff0c;董超同学在校期间一直担任小组组长&#xff0c;平时学习刻苦认真&#xff0c;各个阶段的项目也做的非常优秀&#xff0c;今年5月份左右毕业&#xff0c;所在岗位是开发&#xff0c;目前的薪资在5000左右&#xff0c…

高级开发必须理解的Java中SPI机制

转载自 高级开发必须理解的Java中SPI机制 本文通过探析JDK提供的&#xff0c;在开源项目中比较常用的Java SPI机制&#xff0c;希望给大家在实际开发实践、学习开源项目提供参考。 SPI是什么 SPI全称Service Provider Interface&#xff0c;是Java提供的一套用来被第三方实…

以深圳.NET俱乐部名义 的技术交流会圆满成功

2017年5月13日的深圳下着暴雨&#xff0c;一场以深圳.NET俱乐部名义的.NET技术交流会在微软Build 2017刚闭幕时在罗湖布吉路与翠山路交界处富基PARK国际6F举办&#xff0c;这次交流以微软Build 2017 大会发布的.NET Standard 2.0 Preview1/.NET Core 2.0 Preview 1为契机&#…

关于勒索病毒 Ransom:Win32.WannaCrypt 解决方案的最后一次说明

2017/5/12 晚&#xff0c;勒索软件 Ransom:Win32.WannaCrypt 大面积暴发。比病毒爆发更火的&#xff0c;则是各类关于此病毒的新闻、解决方法在朋友圈等社交媒体的爆发。 其中&#xff0c;有主观善意但客观一知半解的指导&#xff0c;更有夹带私货的安全软件商携各类工具的广告…

C#中的序列化和反序列化案例

序列化&#xff1a;是将对象的状态存储到特定存储介质的过程&#xff0c;也可以说是将对象状态转换为可保持或传输的格式的过程。上面的解释是官方定义&#xff0c;大白话解释就是&#xff0c;将对象以二进制的方式存储在文件中&#xff0c;如果简简单单的将一些数据或者内容存…