Thursday, 6 October 2011

Simple example for OAuth

之前一篇文章介绍了OAuth协议的基本概念,这篇就来举个具体的应用实例吧,照旧还是用dropbox。
  1. 每一个使用dropbox api的应用都可以在官网上申请到一对(key,secret)信息,假设为:
  2. Client Identifier = dpf43f3p2l4k3l03 Client Shared-Secret = kd94hf93k423kf44 (HMAC-SHA1会用到)
  3. Temporary Credential Request过程,dropbox提供的URL为https://api.dropbox.com/0/oauth/request_token,是建立在安全传输协议上的。
    • client生成请求字符串:
    • GET&https%3A%2F%2Fapi.dropbox.com%2F0%2Foauth%2Frequest_token&   oauth_consumer_key%3Ddpf43f3p2l4k3l03%26   oauth_nonce%3D01408443%26   oauth_signature_method%3DHMAC-SHA1%26   oauth_timestamp%3D1298386060%26   oauth_version%3D1.0
    • 用shared-secret对此字符串加密并签名(末尾加了一个'&')
    • 最终的请求格式如下:
    • Authorization: OAuth realm="",   oauth_nonce="01408443",   oauth_timestamp="1298386060",   oauth_consumer_key="dpf43f3p2l4k3l03",   oauth_signature_method="HMAC-SHA1",   oauth_version="1.0",   oauth_signature="N0NYBBJn956BZ16bWH2gEjrqYqM%3D"
    • server返回:
    • oauth_token_secret=u245rhlyg6vlqlf&oauth_token=q3n1yqeeujpv04z
  4. 重定向resource owner到认证URL下进行身份的认证,dropbox的认证URL为:https://www.dropbox.com/0/oauth/authorize。
  5. https://www.dropbox.com/0/oauth/authorize?oauth_token=q3n1yqeeujpv04z&oauth_callback=http%3A%2F%2Fwww.fakeang.me oauth_callback指定了在验证完resource owner之后跳转的URL,这里会重定向到我的blog地址 http://www.fakeang.me/?uid=10537346&oauth_token=q3n1yqeeujpv04z uid是对resource owner的verifier信息
  6. Access Token Request过程,和之前的Temporary Credential Request认证过程比较相似,dropbox的验证地址为:https://api.dropbox.com/0/oauth/access_token
  7. 请求格式会增加两项:
    • oauth_token=q3n1yqeeujpv04z
    • oauth_verifier=10537346
  8. 用shared-secret+‘&’+(oauth_token_secret)u245rhlyg6vlqlf加密
  9. 返回用于访问resource的token和密钥访问资源时和Temporary Credential Request过程也类似,只不过会使用access token
最后附上OAuth1.0协议RFC文档地址:RFC5849

No comments :

Post a Comment