标签:客户 log auth expires sha 加密 utf-8 1.2 错误信息
Bearer Token (RFC 6750) 用于HTTP请求授权访问OAuth 2.0资源,任何Bearer持有者都可以无差别地用它来访问相关的资源,而无需证明持有加密key。一个Bearer代表授权范围、有效期,以及其他授权事项;一个Bearer在存储和传输过程中应当防止泄露,须使用Transport Layer Security (TLS);一个Bearer有效期通常很短,最好不超过1小时。
一. 资源请求
Bearer实现资源请求有三种方式:Authorization Header、Form-Encoded Body Parameter、URI Query Parameter,这三种方式优先级依次递减
GET /resource HTTP/1.1 Host: server.example.com Authorization: Bearer mF_9.B5f-4.1JqM
POST /resource HTTP/1.1 Host: server.example.com Content-Type: application/x-www-form-urlencoded access_token=mF_9.B5f-4.1JqM
使用该方法发送Bearer须满足如下条件:
1.头部必须包含"Content-Type: application/x-www-form-urlencoded" 2.entity-body必须遵循application/x-www-form-urlencoded编码(HTML 4.01 [W3C.REC-html401-19991224]) 3.如果entity-body除了access_token之外,还包含其他参数,须以"&"分隔开 4.entity-body只包含ASCII字符 5.要使用request-body已经定义的请求方法,不能使用GET
如果客户端无法使用Authorization请求头,才应该使用该方法发送Bearer
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字段的用法进行详细描述(下列这些属性/指令不应重复使用):
scope="openid profile email" scope="urn:example:channel=HBO&urn:example:rating=G,PG-13"
当错误发生时,资源服务器将发送的HTTP Status Code(通常是400, 401, 403, 或405)及Error Code如下:
如果客户端发送的资源请求缺乏任何认证信息(如缺少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" }
四. 安全威胁
另外cookie不能包含token,关于cookie的安全弱点,RFC 6265 中有如下描述:
A server that uses cookies to authenticate users can suffer security vulnerabilities because some user agents let remote parties issue HTTP requests from the user agent (e.g., via HTTP redirects or HTML forms). When issuing those requests, user agents attach cookies even if the remote party does not know the contents of the cookies, potentially letting the remote party exercise authority at an unwary server.
可见即使服务端实现了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)两层构成:
标签:客户 log auth expires sha 加密 utf-8 1.2 错误信息
原文地址:http://www.cnblogs.com/XiongMaoMengNan/p/6785155.html