只要有Yahoo帳號就可以登入自己的網站的話,
可以導入Yahoo Login API,
而Yahoo Login API主要分成三種,
可以用下列三種認證/授權方式,
1. OAuth
2. OpenID
3. BBAuth
這邊選用第三種BBAuth,
首先要先去註冊你的appid,
點這裡來註冊
點開以後,會看到如下圖(圖一)的表格,
第一格Yahoo ID:不用自己填,會幫你填好
第二格Authentication method:點選第二個(Browser Based Authentication)
第三格Developer/Company Name:填寫自己的名稱或公司名稱
第四格Product Name:填寫產品名稱
第五格Web Application URL:是指你網站的網址(不能IP喔)
第六格BBAuth Success URL:這格很重要,意思是當使用者登入成功以後,下個頁面要轉到哪個頁面
第七格Contact Email:填入自己的信箱就好
第八格Phone Number:填入電話,這格為optional,可以不填
第九格Description of application:敘述
第十格Require Access Scope:這格也很重要!意思是說這個認證可以在Yahoo的哪些服務進行存取,這邊我們先勾選Single Sign On, no user data can be accessed就好
填寫完成以後就點選Continue,
圖一 |
這頁主要是要進行認證的動作,Yahoo要check這個domain是屬於你的!
做法是在自己的domain的根目錄底下放置一個.html檔案,
檔名yahoo會提供給你,這邊的檔名是ydnv6nnxP.html。
將此檔案放置在domain根目錄底下,
然後按下圖中的按鈕Check Domain,
此時Yahoo就會去request該.html檔,如果有放置上去,
就會通過驗證。就會如圖中的Result: Pass
如果是Pass,就繼續往下一步,按下按鈕Continue
圖二 |
點完Continue按鈕以後,會看到下圖(圖三)的畫面
代表申請成功,Yahoo會給你app id和secret
圖三 |
申請完成以後就開始來寫code了!!
這邊我以JSP/SERVLET為主,
try{
final String strAppId = "appID"; //應用程式碼
final String strSecrect = "secect"; //驗證用
String strTimeStamp = String.valueOf(new Date().getTime()/1000); //把毫秒轉成秒數
//接下來這段主要是在做md5,
MessageDigest Signature = MessageDigest.getInstance("MD5");
//下面這行是Yahoo要求要進行md5的參數
String tempMD5 = String.format("/WSLogin/V1/wslogin?appid=%s&.intl=tw&send_userhash=1&ts=%s%s", strAppId, strTimeStamp, strSecrect);
Signature.update(tempMD5.getBytes());
byte[] Bt = Signature.digest();
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < Bt.length; ++i) {
byte b = Bt[i];
int value = (b & 0x7F) + (b < 0 ? 128 : 0);
buffer.append(value < 16 ? "0" : "");
buffer.append(Integer.toHexString(value));
}
//md5 結束
//進行完md5以後,就進行Redirect
resp.sendRedirect(String.format("https://api.login.yahoo.com/WSLogin/V1/wslogin?appid=%s&.intl=tw&send_userhash=1&ts=%s&sig=%s", strAppId, strTimeStamp, buffer.toString()));
}catch (Exception e) {
//MD5 Exception
}
在進行完redirect以後,就會轉向Yahoo登入的頁面,
登入完成就會將頁面導向之前第六格BBAuth Success的URL
接下來有比較重要的幾點,
由於Yahoo Login是無法取得使用者的資訊,
它不同於Facebook、Goolge Login,
可是一般的網站不是都要記住session嗎?
可能是將使用者帳號之類的資訊存在session裡面,
可是Yahoo卻無法存取到使用者相關資訊,
但是!Yahoo會回傳一個userhash,到第六格BBAuth Success的URL中,
而這個userhash是唯一的,不會有重複!
所以我們一樣可以利用此userhash存在session裡面,
還會回傳appid、token、appdata、ts、sig這些參數回來。
但比較重要的是userhash,因為這個是Unique的identifier!!
大致上這樣就完成一個Yahoo Login了。
參考來源