Mais conteúdo relacionado
OAuth1.0协议
- 8. 1.2 OAuth现状 1. 国外几大网站凡是搞开放平台的都提供了OAuth授权认证。 比如:twitter、google、facebook等,到最新的foursquare等。 2. Twitter在9月1日取消了basic认证,只提供OAuth授权认证。 3. OAuth1.0已经成为RFC5849标准 http://tools.ietf.org/html/rfc5849 4. 目前已有多种语言的认证库,比如Java、PHP、.NET、JavaScript等,这样就可以让第三方开发者很快的进入到核心的API开发中,而不必为认证复杂而苦恼。 5.OAuth前途光明,2.0已经在制定当中。 6.比较杯具的是OAuth在国内很不流行,因为开放平台在国内就很不流行。
- 11. 2.1 OAuth参数介绍 oauth_signature_method:认证方法,协议中规定的方法有:HMAC-SHA1、 RSA-SHA1、PLAINTEXT。PLAINTEXT在协议中建议使用https来传递。 oauth_signature:签名字符串。如果第三方应用签名提供的与服务提供方生成签名的不匹配,则验证失败。此项为验证过程中的关键参数。 oauth_version:OAuth版本。可选,如果存在,目前必须为1.0。 oauth_token:授权与非授权令牌。 oauth_token_secret:授权与非授权密钥。 oauth_callback:第三方提供给服务方授权后的跳转页面,如果第三方没有一个可以回调的地址,则此值为:“oob”(区分大小写)
- 12. 2.2 签名方法 Base String:签署基字符串(Signature Base String)就是将请求参数排序后串接为单个字符串。 Base String的生成规则: Urlencode(HTTP Method & 请求URL & 请求参数) 其中请求参数为urlencode(参数名)=urlencode(参数值),并用&分割 拿到Base String后就可以进行签名,不同的签名方法分别不同。 比如HMAC-SHA1的方法为: 将Base String作为text,key为oauth_consumer_key和oauth_token_secret(无论是否存在)以&作为间隔的字符串。然后经过base64编码,最后根据RFC3986标准进行urlencode。
- 13. 2.3 服务方返回值说明 • HTTP 400 Bad Request ◦Unsupported parameter ◦Unsupported signature method ◦Missing required parameter ◦Duplicated OAuth Protocol Parameter • HTTP 401 Unauthorized ◦Invalid Consumer Key ◦Invalid / expired Token ◦Invalid signature ◦Invalid / used nonce
- 16. 2.5 请求Request Token oauth_consumer_key oauth_signature_method oauth_signature oauth_timestamp oauth_nonce oauth_callback oauth_version(可选) 需要提供的参数
- 17. 2.5 请求Request Token 返回的参数 oauth_token oauth_token_secret oauth_callback_confirmed 此值一定为 true 比如:oauth_token=xxxxxxxxxx&oauth_token_secret=xxxxxxxxxx&oauth_callback_confirmed=true
- 20. 2.6 用户授权Request Token 返回的参数 oauth_token 已授权的Request Token oauth_verifier 如果第三方没有一个有效的回调地址,则服务方应当将此参数给用户显示出来,让用户自主到第三方网站上进行验证。 比如:http://www.skiyo.cn/callback.php?oauth_token=xxxxxx&oauth_verifier=1234
- 22. 2.7 换取Access Token oauth_consumer_key oauth_signature_method oauth_signature oauth_timestamp oauth_nonce oauth_version(可选) oauth_token授权了的Request Token oauth_verifier上步提供的验证码 需要提供的参数
- 23. 2.7 换取Access Token 返回的参数 oauth_token 已授权的Request Token oauth_token_secret 已授权的Request Token密钥 另外,服务方还可以带有其他的参数,比如: oauth_token=xxxxxx&oauth_token_secret=xxxxxxxxxxx&uid=100000
- 24. 2.8 请求API oauth_consumer_key oauth_signature_method oauth_signature oauth_timestamp oauth_nonce oauth_version(可选) oauth_token授权了的Request Token 需要提供的参数 第三方每次请求API时都需要带有这些参数,这些参数可以存放在POST、GET和head中。下面是存放在head中的一个例子:
- 25. 2.8 请求API Authorization: OAuth realm="http://sp.example.com/", oauth_consumer_key="0685bd9184jfhq22", oauth_token="ad180jjd733klru7", oauth_signature_method="HMAC-SHA1", oauth_signature="wOJIO9A2W5mFwDgiDvZbTSMK", oauth_timestamp="137131200", oauth_nonce="4572616e48616d6d65724c61686176", oauth_version="1.0"