• OAuth 授权与 OpenId 验证


    在通过 REST API 向第三方开放资源的网站中(比如 Dropbox,新浪微博等),许多都使用 OAuth 授权方式。这里总结下 OAuth 1.0 授权的过程。

    第三方要得到服务提供商的用户资源的使用权限,首先需要到服务提供商网站中申请自己的 oauth_consumer_key 和 oauth_consumer_secret。然后按照下面三步的方式获取用户授权。

    第一步是获取临时的 Request Token。第三方发送 oauth_consumer_key,oauth_timestamp,oauth_nonce,oauth_signature_method 和 oauth_signature 给服务提供商;而服务提供商返回 oauth_token,oauth_token_secret。其中 oauth_timestamp 是当前的时间,用于防止重放攻击;oauth_nonce 是随机数;oauth_signature_method 是签名方法(包括 HMAC-SHA1, RSA-SHA1 和 PLAINTEXT)而 oauth_signature 对传输方法,API 网址和参数连接后签名的结果。

    第二步是获取用户授权。第三方发送 oauth_token 和 oauth_callback 给服务提供商,同时将页面重定向到服务提供商的用户授权页面;而服务提供商在用户同意授权后返回 oauth_token,并重定向回前面第三方发送的 oauth_callback 地址。

    第三步是获取 Access Token。第三方发送 oauth_consumer_key,oauth_token,oauth_timestamp,oauth_nonce,oauth_signature_method 和 oauth_signature 给服务提供商;而服务提供商返回新的长期有效的 oauth_token 和 oauth_token_secret 给第三方。

    得到了 Access Token,就可以用它来访问该用户的资料了,访问某个 API 地址时只需要发送 oauth_consumer_key,oauth_token,oauth_timestamp,oauth_nonce,oauth_signature_method 和 oauth_signature 参数就可以了。

    例如,Dropbox 的 OAuth 授权过程基本是这样的:

    => 网页在 http://example.com/
    
    https://api.dropbox.com/1/oauth/request_token
      ?oauth_consumer_key=3f0mtmjk0qhxgfv
      &oauth_signature_method=HMAC-SHA1
      &callback=json1
      &oauth_timestamp=1340334772
      &oauth_nonce=G06XIc
      &oauth_signature=Mqv6%2BQ%2BjYl08pRP9roI6kOn9jfg%3D&
    
    https://www.dropbox.com/1/oauth/authorize
      ?oauth_token=6d190m4fg2de2xl
      &oauth_callback=http://example.com/
    
    => 网页返回到 http://example.com/?uid=432632&oauth_token=6d190m4fg2de2xl
     
    https://api.dropbox.com/1/oauth/access_token
      ?oauth_consumer_key=3f0mtmjk0qhxgfv
      &oauth_signature_method=HMAC-SHA1
      &oauth_token=6d190m4fg2de2xl
      &callback=json1
      &oauth_timestamp=1340334865
      &oauth_nonce=e3RKM6
      &oauth_signature=TAFTpt2bF4bxxcbs9lpIIU%2FPYG8%3D&
    
    https://api.dropbox.com/1/account/info
      ?oauth_consumer_key=3f0mtmjk0qhxgfv
      &oauth_signature_method=HMAC-SHA1
      &oauth_token=za2f38ze22isagk
      &callback=json2
      &oauth_timestamp=1340334867
      &oauth_nonce=33k4Xx
      &oauth_signature=DEk3gW7kf%2BxQJxBXOhtTQX%2BOEwQ%3D&
    

    OAuth 提供的是对用户资料的授权过程,而如果只需要验证用户的真实性,只需要使用 OpenID。例如腾讯就提供 QQ 号码的 OpenID 验证,可以用 QQ 号码登录其它多个第三方网站。

    参考资料:
    [1] OAuth Core 1.0
    [2] Oauth - 新浪微博API
    [3] 腾讯微博 API OAuth认证介绍
    [4] Dropbox - REST API reference
    [5] OAuth那些事儿
    [6] OAuth的改变
    [7] OpenID Foundation website
    [8] OpenID - 维基百科
    [9] OpenId&OpenKey认证

  • 相关阅读:
    [笔记]JavaScript获得对象属性个数的方法
    [转]去除inline-block元素间间距的N种方法
    表单提交成功如何弹出提示
    [笔记]CSS样式声明顺序
    [转]浏览器渲染机制——一定要放在body底部的js引用
    [笔记]使用clearfix清除浮动
    [转]jQuery.validate插件在失去焦点时执行验证代码
    验证常用正则表达式
    字符串与Objec之间互相转换
    $.extend()
  • 原文地址:https://www.cnblogs.com/zoho/p/2558910.html
Copyright © 2020-2023  润新知