Skip to content

Instantly share code, notes, and snippets.

@arganzheng
Last active November 28, 2017 16:07
Show Gist options
  • Save arganzheng/5942519 to your computer and use it in GitHub Desktop.
Save arganzheng/5942519 to your computer and use it in GitHub Desktop.
开放平台点滴积累

鉴权学习

对于一个API请求,开发平台一般需要知道下面几件事情:

  1. 哪个应用发起这个请求(Which application is making the request)
  2. 这个请求是为哪个用户发起的(Which user the request is posting on behalf of)
  3. 用户是否对这个请求进行授权(Whether the user has granted the application authorization to post on the user's behalf)
  4. 请求是否在传输过程中被篡改(Whether the request has been tampered by a third party while in transit)

为了让应用提供这些鉴权信息,一般开发平台采用OAuth进行授权认证。 OAuth 1.0a protocol

一般来说OAuth需要提供请求带上这些参数信息:

  1. OAuth oauth_consumer_key="xvz1evFS4wEEPTGEFPHBog": 标识哪个应用发起这个API请求
  2. oauth_nonce="kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg": 每次请求都应该生成一个唯一的nonce值。API平台使用这个来确定一个请求是否被重复请求多次。一般使用timestamp作为nonce值。
  3. oauth_signature="tnnArxj06cWHq44gCs1OSKk%2FjLY%3D": 使用密钥,对所有其他请求参数应用某个签名算法进行计算得到的签名结果。目的是确认请求没有在传输过程中被篡改。同时由于密钥与app是一一对应的,可以验证确实是该应用发起了这个请求。(这个过程和目的正是HTTPS要要解决的,所以使用HTTPS的auth2.0就不需要签名了。)
  4. oauth_signature_method="HMAC-SHA1": 常用的签名算法是HMAC-SHA1和MD5。可以指定一种,不让用户选择。
  5. oauth_timestamp="1318622958": 标识请求的发起时间,API平台一般会拒绝太老的请求。
  6. oauth_token="370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb": 代表用户对这个请求的授权,表示允许应用代表用户调用API操作他们的数据。
  7. oauth_version="1.0": OAuth版本,方便后续升级OAuth协议。

说明:有时候一些API并不是跟用户强关联的,比如搜索API,类目API。这时候就不需要用户授权,只需要验证app的合法性。Application-only authentication

获取access token的方式

twitter:Obtaining access tokens

安全等级

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment