RFC 6750不记名令牌

编号:OAPI-DESIGN-003

作者:刘海龙

微博:[http://weibo.com/liuhailong2008]

博客:[http://blog.csdn.net/stationxp]

含义

oAuth使客户通过令牌而不是资源所有者的凭证来访问受保护资源,在RFC 6749中,访问令牌(access token)被定义为:颁发给客户端代表访问权限的字符串。

不记名令牌(bearer),顾名思义,除令牌本身外,不再验证其他权限。凭借访问令牌即可实现对受控资源的访问,因此,令牌的传输安全就极其重要。

令牌本身隐含的语义包括:范围、实效,也可以包含其他授权属性。在RFC 6750中强调了不记名,和身份相关的属性应该摒弃。

bearer :单词本意是递送人,持有人。

典型应用:网盘共享文件,设置提取码,谁知道提取码都可以提取文件。

RFC 6750定义了采用传输层安全(TLS,RFC 5246)在HTTP上使用不记名令牌访问受保护资源。要求强制令牌传输过程中,强制使用 TLS。

不记名身份验证方案主要采用 使用WWW-Authenticate和Authorization的HTTP头部作为服务器身份验证。

RFC 2617

算法

b64token = 1 * (ALPHA / DIGIT/"-"/"."/"_"/"~"/"+"/"/") *"="
credentials = "Bearer" 1*SP b64token

如:Bearer mF-9.B5f-4.1Jqm

发送令牌的方式

授权请求头部字段

例如:

GET /resource HTTP/1.1
Host:resource.server.com
Authorization: Bearer mF-9.B5f-4.1Jqm

服务器必须支持此方法。

表单编码的主体参数

例如:

POST /resource HTTP/1.1
Host:resource.server.com
Content-Type:application/x-www-form-urlencoded
access_token=mF-9.B5f-4.1Jqm

除非客户端不能使用第一种方法,才可以用这种方法,而且,必须严格按照要求,符合一定规范(比如:只能用POST方法,主体中只能使用ASCII)。

服务器可以不支持这种方法。

URL查询参数

简单到懒得解释,如下:

http://resource.server.com/resource?access_token=mF-9.B5f-4.1Jqm

客户端发送请求时,应发送含有“no-store”选项的Cache-Control头。成功状态下,服务器响应应带有“private”选项的Cache-Control头。

这种方法不应使用。就当没有这种方法吧。

错误信息的返回

没有权限访问资源时候,HTTP格式的错误返回消息中必须包含HTTP "WWW-Authenticate"响应头部字段。

RFC 2617

realm:领域。

scope不需要暴露给客户端。

例如:

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

其他错误消息的返回方法,参照RFC 6749 5.2。

例如:

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

如果客户端在盲试,什么错误信息都不要给他 。

不记名令牌响应的例子

HTTP/1.1 200
Content-Type:application/json;charset=UTF-8
Cache-Control:no-store
Pragma:no-cache
{
    "access_token":"blabla",
    "token_type":"Bearer",
    "expires_in":3600,
    "refresh_token":"blabla2"
}

安全考量

可能的威胁

  • 伪造令牌/修改令牌
  • 泄漏敏感信息
  • 令牌重定向
  • 令牌重放

我们的盾牌

数字签名(防止令牌被修改)

消息认证码(MAC)

TLS ,RFC 5246, RFC 2246

客户端必须验证TLS证书链。

证书吊销列表(CRL,RFC5280)

Cookie是明文的,靠不住。只有二货才会把令牌保存在Cookie中。

关于Cookie的安全考量,RFC 6265。

集群环境中,TLS不能只能覆盖早前段代理服务器,存在一段明文暴露的过程。

令牌有效期1小时,是个合理期限。

为了不把令牌发错人,客户端必须按照RFC 2818 3.1验证资源服务器身份。

安全建议汇总

  • 客户端验证证书链:防DNS劫持。
  • 总是使用TLS。
  • 不存在Cookie中,不在url中传。

IANA考量

错误代码和说明的规范清单。

RFC 6750。

时间: 2024-10-29 19:06:32

RFC 6750不记名令牌的相关文章

Web API 身份验证 不记名令牌验证 Bearer Token Authentication

1. Startup.Auth.cs文件 添加属性 public static OAuthBearerAuthenticationOptions OAuthBearerOptions { get; private set; } 添加静态构造函数 /// <summary> /// 构造函数 /// </summary> static Startup() { OAuthBearerOptions = new OAuthBearerAuthenticationOptions(); }

asp.net Web API 身份验证 不记名令牌验证 Bearer Token Authentication 简单实现

1. Startup.Auth.cs文件 添加属性 1 public static OAuthBearerAuthenticationOptions OAuthBearerOptions { get; private set; } 添加静态构造函数 1 2 3 4 5 6 7 /// <summary> /// 构造函数 /// </summary> static Startup() {     OAuthBearerOptions = new OAuthBearerAuthent

OAuth 2.0 / RCF6749 协议解读

OAuth是第三方应用授权的开放标准,目前版本是2.0版,以下将要介绍的内容和概念主要来源于该版本.恐篇幅太长,OAuth 的诞生背景就不在这里赘述了,可参考 RFC 6749 . 四种角色定义: Resource Owner:资源所有者,即终端用户 Resource server:资源服务器,即提供资源存储访问一方 Client:通常指第三方应用 Authorization server:授权服务器 协议端点(URI):OAuth给授权过程定义了Authorization.Token和Redi

使用 OAuth2-Server-php 在 Yii 框架上搭建 OAuth2 Server

Yii 有很多 extension 可以使用,在查看了 Yii 官网上提供的与 OAuth 相关的扩展后,发现了几个 OAuth2 的客户端扩展,但是并没有找到可以作为 OAuth2 Server 的扩展.因为 Yii 是组织良好的易于扩展的框架,所以完全可以集成其它的 PHP OAuth2 Server 实现方案.在 OAuth.net/2/ 官网上,提供了几个 PHP 实现的 OAuth2 Server.这里使用第一个 OAuth2-Server-php 来作为 Yii 框架的 OAuth2

OAuth2-Server-php

Yii 有很多 extension 可以使用,在查看了 Yii 官网上提供的与 OAuth 相关的扩展后,发现了几个 OAuth2 的客户端扩展,但是并没有找到可以作为 OAuth2 Server 的扩展.因为 Yii 是组织良好的易于扩展的框架,所以完全可以集成其它的 PHP OAuth2 Server 实现方案.在 OAuth.net/2/ 官网上,提供了几个 PHP 实现的 OAuth2 Server.这里使用第一个 OAuth2-Server-php 来作为 Yii 框架的 OAuth2

OAuth 2 的简单理解

什么是 OAuth 2.0 根据 oauth.net 的描述,我们可以将它简述为以下内容:OAuth 2.0 是 OAuth 1.0 框架协议的升级版本,简化了多种平台上身份及授权认证的流程. 具体的文档可参考 RFC 6749 和 RFC 6750.  OAuth 2.0 的用途 OAuth 2.0 的主要用途大概有以下几种: 账号接入:降低用户登录的成本.降低一定的账号风险 资源访问:以身份权限为手段保护资源处理的有效性.合法性和安全性  OAuth 2.0 的一般流程 客户端(如 Web

使用 OAuth2-Server-php 搭建 OAuth2 Server

Yii 有很多 extension 可以使用,在查看了 Yii 官网上提供的与 OAuth 相关的扩展后,发现了几个 OAuth2 的客户端扩展,但是并没有找到可以作为 OAuth2 Server 的扩展.因为 Yii 是组织良好的易于扩展的框架,所以完全可以集成其它的 PHP OAuth2 Server 实现方案.在 OAuth.net/2/ 官网上,提供了几个 PHP 实现的 OAuth2 Server.这里使用第一个 OAuth2-Server-php 来作为 Yii 框架的 OAuth2

OpenID Connect Core 1.0(九)声明(Claims)

5 声明(Claims) 这一节说明客户端如何获取关于终端用户声明和验证事件.它还定义了一组标准的基本声明配置.预定义一组可请求的声明,使用特定的scope值或能用于请求参数中的个人声明.声明可以直接来自OpenID提供者或分布式来源. 5.1 标准声明(Standard Claims) 这个规范定义了一组标准的声明.他们可以请求的返回或用户信息的响应,此在 5.3.2节或在第二节中的ID Token. sub string 在发行人终端用户的主体标识符. name  string 终端用户的全

The OAuth 2.0 Authorization Framework-摘自https://tools.ietf.org/html/rfc6749

Internet Engineering Task Force (IETF) D. Hardt, Ed. Request for Comments: 6749 Microsoft Obsoletes: 5849 October 2012 Category: Standards Track ISSN: 2070-1721 The OAuth 2.0 Authorization Framework Abstract The OAuth 2.0 authorization framework enab