免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
OAuth授權(quán)的Java實(shí)現(xiàn)詳解
由于最近在開發(fā)一個(gè)關(guān)于微博整合的小應(yīng)用,于是開始接觸各大微博平臺(tái)的開放平臺(tái)(新浪、搜狐、網(wǎng)易、QQ):目前這三大微博的應(yīng)用開發(fā)都采用OAuth授權(quán),要訪問大部分API都需要OAuth方式的身份鑒權(quán)。

OAuth是什么?

先 來簡(jiǎn)單介紹一下OAuth授權(quán)協(xié)議:OAUTH協(xié)議為用戶資源的授權(quán)提供了一個(gè)安全的、開放而又簡(jiǎn)易的標(biāo)準(zhǔn)。同時(shí),任何第三方都可以使用OAuth認(rèn)證服 務(wù),任何服務(wù)提供商都可以實(shí)現(xiàn)自身的OAuth認(rèn)證服務(wù),因而OAUTH是開放的。業(yè)界提供了OAuth的多種實(shí)現(xiàn)如 PHP,JavaScript,Java,Ruby等各種語言開發(fā)包,大大節(jié)約了程序員的時(shí)間,因而OAuth是簡(jiǎn)易的。目前互聯(lián)網(wǎng)很多服務(wù)如Open API,很多大頭公司如Google,Yahoo,Microsoft等都提供了OAuth認(rèn)證服務(wù),這些都足以說明OAUTH標(biāo)準(zhǔn)逐漸成為開放資源授權(quán) 的標(biāo)準(zhǔn)。

OAuth的授權(quán)流程

你所開發(fā)的應(yīng)用需要流程如下:

  1. 向應(yīng)用服務(wù)商(新浪、搜狐等微博)請(qǐng)求request_token。
  2. 得到request_token后重定向用戶到服務(wù)商的授權(quán)頁面。
  3. 如果用戶選擇授權(quán)你得應(yīng)用,用request_token向服務(wù)商請(qǐng)求換取access_token。
  4. 得到access_token等信息訪問受限資源。

而服務(wù)商相應(yīng)的響應(yīng)如下:

  1. 創(chuàng)建request_token返回給應(yīng)用。
  2. 詢問用戶是否授權(quán)此應(yīng)用。如果用戶授權(quán)重定向用戶至應(yīng)用頁面。
  3. 創(chuàng)建access_token并返回給應(yīng)用。
  4. 響應(yīng)受限資源請(qǐng)求并返回相關(guān)信息。

通俗點(diǎn)的說法就是“你拿著你得身份證明(request_token)向服務(wù)商申請(qǐng)進(jìn)入用戶家的門鑰匙(access_token),服務(wù)商詢問用戶同不同意,如果用戶同意服務(wù)商就給你進(jìn)入用戶家門的鑰匙(access_token),拿到鑰匙后你就可以進(jìn)到用戶家里”。

OAuth授權(quán)的Java實(shí)現(xiàn)

作為一個(gè)開放協(xié)議目前有很多現(xiàn)成的Oauth庫(kù)可供開發(fā)者使用,可以點(diǎn)擊這里下載。不過有精力有時(shí)間的話還是自己去實(shí)現(xiàn)一下OAuth授權(quán)的流程,可以很好的體會(huì)OAuth認(rèn)證協(xié)議的原理。

下面就是我使用Java實(shí)現(xiàn)Oauth的具體步驟:

一、獲取Request_token

首先得準(zhǔn)備一下參數(shù)及其來源:

  1. oauth_consumer_key —— 注冊(cè)應(yīng)用后由應(yīng)用服務(wù)商提供
  2. consumer_secret —— 注冊(cè)應(yīng)用后由應(yīng)用服務(wù)商提供
  3. oauth_callback —— 用戶授權(quán)后的返回地址
  4. oauth_nonce —— 隨機(jī)字符串,須保證每次都不同
  5. oauth_timestamp —— 時(shí)間戳
  6. oauth_signature_method —— 簽名base string 的方法,目前支持 HMAC-SHA1
  7. oauth_version —— Oauth協(xié)議版本

還需要下面三個(gè)請(qǐng)求地址(這些地址任何一個(gè)提供OAuth的服務(wù)商都會(huì)提供給你,看下API文檔就會(huì)找到):

  1. requst_token_url —— 上面第1步中的請(qǐng)求地址
  2. authorize_url —— 上面第2步的請(qǐng)求地址
  3. access_token_url —— 上面第3步的請(qǐng)求地址

至于如何注冊(cè)應(yīng)用,新浪微博點(diǎn)此,網(wǎng)易微博點(diǎn)此,騰訊微博點(diǎn)此,搜狐微博需要你發(fā)郵件索取,具體看這里。注冊(cè)成功后就會(huì)獲得oauth_consumer_key 和 consumer_secret 兩個(gè)參數(shù)。

oauth_callback 起的作用是當(dāng)用戶授權(quán)成功后服務(wù)商會(huì)把用戶重定向到這個(gè)網(wǎng)址。

oauth_nonce 是一個(gè)隨機(jī)字符串下面是我的生成代碼:

public String set_nonce() {
String base = "abcdefghijklmnopqrstuvwxyz0123456789";
Random random = new Random();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < 18; i++) {
int number = random.nextInt(base.length());
sb.append(base.charAt(number));
}
return sb.toString();
}

oauth_timestamp 是請(qǐng)求的時(shí)間戳,我的代碼如下:

public String set_timestamp() {

Date date = new Date();
long time = date.getTime();
return (time + "").substring(0, 10);
}

需要說明一下的是這里的時(shí)間戳為10位而不是13位,因此截取0-10位置。

其他參數(shù)直接指定就行了。

接下來,有了這些參數(shù)就可以組裝base string了。貯備base string的目的就是為了得到 oauth_signature 這個(gè)參數(shù),這個(gè)參數(shù)向服務(wù)商發(fā)送請(qǐng)求的時(shí)候需要用到。

組裝的方法是用下面8部分

  1. POST(也可以是GET,取決于你應(yīng)用服務(wù)商支持哪個(gè))。
  2. Urlencode之后的requst_token_url 。
  3. oauth_callback=Urlencode之后你的oauth_callback(Urlencode的參數(shù)為“utf-8”)。
  4. oauth_consumer_key = 你的oauth_consumer_key 
  5. oauth_nonce = 你的oauth_nonce 
  6. oauth_signature_method = 你的 oauth_signature_method 
  7. oauth_timestamp = 你的oauth_timestamp 
  8. oauth_version = “1.0”——目前大多數(shù)OAuth都采用的是1.0或1.0a版本。
需 要注意的是上面除了1跟2外其他參數(shù)的格數(shù)形如: abc=“abc” ,然后先將上面1和2部分用&號(hào)相連得到串A、3-8部分用&相連得到串B,下面需要將串B再進(jìn)行一次Urlencode得到串C,最后 將A跟C以&號(hào)相連就得到了base string。這個(gè)過程中 oauth_callback 實(shí)質(zhì)上經(jīng)過了兩次 Urlencode ,組裝base string是非常容易出錯(cuò)的,一不小心丟一個(gè)引號(hào)或者格式稍有不對(duì)就會(huì)出錯(cuò)。

下面是我的Java實(shí)現(xiàn)代碼:

public String set_basestring() throws UnsupportedEncodingException {
String bss;
bss = oauth_request_method + "&"
+ URLEncoder.encode(requst_token_url, "utf-8") + "&";
String bsss = "oauth_callback="
+ URLEncoder.encode(oauth_callback, "utf-8")
+ "&oauth_consumer_key=" + oauth_consumer_key + "&oauth_nonce="
+ oauth_nonce + "&oauth_signature_method="
+ oauth_signature_method + "&oauth_timestamp="
+ oauth_timestamp + "&oauth_version=" + oauth_version;
bsss = URLEncoder.encode(bsss, "utf-8");
return bss + bsss;
}

有 了base string就可以簽名生成oauth_signature這個(gè)參數(shù),oauth_signature會(huì)在請(qǐng)求request_token的時(shí)候用到。簽 名算法是HMAC-SHA1,簽名的key就是最開始的consumer_secret后加一個(gè)&號(hào),簽名算法代碼如下:

public String hmacsha1(String data, String key) {
byte[] byteHMAC = null;
try {
Mac mac = Mac.getInstance("HmacSHA1");
SecretKeySpec spec = new SecretKeySpec(key.getBytes(), "HmacSHA1");
mac.init(spec);
byteHMAC = mac.doFinal(data.getBytes());
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException ignore) {
}
String oauth = new BASE64Encoder().encode(byteHMAC);
return oauth;
}

里面用的的BASE64Encoder這個(gè)類可以Google一個(gè)。

得到oauth_signature后就要開始向 requst_token_url 發(fā)送請(qǐng)求了,OAuth規(guī)范定義了三種傳遞OAuth參數(shù)方式:

  1. httpheader中
  2. url中
  3. post form中

國(guó)內(nèi)各大微博的支持情況是:新浪Httpheader可用,網(wǎng)易Httpheader可用,騰訊只支持在url,搜狐由于沒有appkey所以還沒去嘗試。

如果使用Httpheader傳遞參數(shù)頭名為“Authorization”,值為下面的格式,將值改為自己應(yīng)用的。

OAuth oauth_nonce="9zWH6qe0qG7Lc1telCn7FhUbLyVdjEaL3MO5uHxn8", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1272323047", oauth_consumer_key="GDdmIQH6jhtmLUypg82g", oauth_token="8ldIZyxQeVrFZXFOZH5tAwj6vzJYuLQpl0WUEYtWc", oauth_verifier="pDNg57prOHapMbhv25RNf75lVRd6JDsni1AJJIDYoTY", oauth_signature="PUw%2FdHA4fnlJYM6RhXk5IU%2F0fCc%3D", oauth_version="1.0"

url和post form兩種方式的參數(shù)名和參數(shù)值也即上面的,完全一樣。

請(qǐng)求發(fā)送成功后就會(huì)得到的響應(yīng)如下:

oauth_token=8ldIZyxQeVrFZXFOZH5tAwj6vzJYuLQpl0WUEYtWc&oauth_token_secret=x6qpRnlEmW9JbQn4PQVVeVG8ZLPEx6A0TOebgwcuA&oauth_callback_confirmed=true

可以看到響應(yīng)里面已經(jīng)包含oauth_token和oauth_token_secret了。

(未完)

http://www.littlear.com/post/2011/01/0285/

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Oauth
新浪微博開放平臺(tái)OAuth授權(quán)解決方案(含代碼)
有道云筆記openAPI
釘釘 回調(diào)事件 消息加解密
微信公眾賬號(hào)開發(fā)教程第3篇-開發(fā)模式啟用及接口配置
分享微信驗(yàn)證ASPX.Net代碼:C#如何校驗(yàn)URL有效性成為微信開發(fā)者
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服