Xiaopei's DokuWiki

These are the good times in your life,
so put on a smile and it'll be alright

User Tools

Site Tools


it:oauth

OAuth

OAuth 外的授权方式

HMAC(Hash-based message authentication code)

HMAC Auth 的核心部分与 OAuth 差不多,只不过 OAuth 多了很多与 token 分发相关的内容。HMAC Auth 的思想如下1)

回到Security的三个属性:一致性,机密性,和可用性。HMAC Auth保证一致性:请求的数据在传输过程中未被修改,因此可以安全地用于验证请求的合法性。

HMAC主要在请求头中使用两个字段:Authorization和Date(或X-Auth-Timestamp)。Authorization字段的内容由“:“分隔成两部分,”:“前是access-key,”:“后是HTTP请求的HMAC值。在API授权的时候一般会为调用者生成access-key和access-secret,前者可以暴露在网络中,后者必须安全保存。当客户端调用API时,用自己的access-secret按照要求对request的headers/body计算HMAC,然后把自己的access-key和HMAC填入Authorization头中。服务器拿到这个头,从数据库(或者缓存)中取出access-key对应的secret,按照相同的方式计算HMAC,如果其与Authorization header中的一致,则请求是合法的,且未被修改过的;否则不合法。

GET /photos/puppy.jpg HTTP/1.1
Host: johnsmith.s3.amazonaws.com
Date: Mon, 26 Mar 2007 19:37:58 +0000

Authorization: AWS AKIAIOSFODNN7EXAMPLE:frJIUN8DYpKDtOLCwo//yllqDzg=

在做HMAC的时候,request headers中的request method,request URI,Date/X-Auth-Timestamp等header会被计算在HMAC中。将时间戳计算在HMAC中的好处是可以防止replay攻击。客户端和服务器之间的UTC时间正常来说偏差很小,那么,一个请求携带的时间戳,和该请求到达服务器时服务器的时间戳,中间差别太大,超过某个阈值(比如说120s),那么可以认为是replay,服务器主动丢弃该请求。

使用HMAC可以很大程度上防止DOS攻击 —— 无效的请求在验证HMAC阶段就被丢弃,最大程度保护服务器的计算资源。

2

流程

OAuth 2 的角色与 OAuth 1 相同, Client 指第三方应用,Resource Owner 指用户,Authorization Server 是授权服务器,Resource Server 是API服务器.

  1. Obtaining Authorization
  2. Issuing an Access Token
  3. Refreshing an Access Token
  4. Accessing Protected Resources

OAuth 2 与 1 在 Obtaining Authorization 的区别为.

Authorization Code Flow

依我所见流程上 2 较 1 的不同为: 省去了第一次获得 Request Token 的过程, 直接请求授权过的 Request Token, 而这之间通过客户端指定的 state 检验. 之后类似.

  • 服务端流程(协议中Authorization Code Flow)。此流程适用于在Web服务端调用REST API的的应用。例如:网站,站内应用。
  • 客户端流程(协议中Implicit Flow)。注意:此流程适用于在客户端调用REST API的应用。例如:后端无Web Server支持的手机客户端和桌面客户端,运行于浏览器内部的JavaScript、ActionScript应用(浏览器插件、纯Flash应用)。
  • 用户名密码流程(协议中Resource Owner Password Credentials Flow)。此流程适用于无法使用浏览器发起服务端和客户端验流程的应用。

refs

1

流程

it/oauth.txt · Last modified: 2015/08/03 19:00 by admin