Google有提供很多的API方便妳去存取他們的服務,例如Google Contacts API就需要先取得權限才能使用,而在這篇文章中要教的ClientLogin是我個人覺得最簡單的一種取得權限方式,它的運作原理很簡單,就是透過http傳送帳號、密碼給Google,然後Google就會送回一串資料,其中就包含了授權碼,透過授權碼妳就可以去存取Google的各項服務(例如聯絡人、日曆、筆記本等等)
ClientLogin這種方式其實比較適合桌面程式或手機應用程式使用,因為他們不像其他認證方式一樣需要開啟一個授權頁面,所以你可以設計自己的登入介面讓使用者輸入帳號密碼,但這種方式也有一個缺點就是使用者未必會想輸入帳號密碼,因為他們會懷疑妳是釣魚網站…
ClientLogin基本知識
傳送指令格式:
GET https://www.google.com/accounts/ClientLogin?accountType=A&Email=B&Passwd=C&service=D
以上這行就是說透過http協定傳送GET的意思,請注意大小寫是有差別的
參數解釋:
- accountType:要取得權限的帳戶類型,使用HOSTED_OR_GOOGLE是最保險的方式,可以田的選項有:GOOGLE、HOSTED、HOSTED_OR_GOOGLE
- Email:要取得權限的帳號,需包含@後面那一串資料,以我為例:[email protected]
- Passwd:使用者的密碼
- service:要使用該權限的服務代號,例如我要取得Google日曆的權限,則這裡就輸入cl,各項服務的代碼可以在Google Code上面找到
- source:可填可不填,就只是讓Google可以記錄是誰在存取該項服務
範例:
https://www.google.com/accounts/ClientLogin?accountType=GOOGLE&[email protected]&Passwd=123456789&service=cl
傳回值解釋:
正常來講ClientLogin的傳回值應該會包含SID、LSID、Auth這三項資料,其中的Auth就是授權碼,透過Auth妳可以去存取其他的Google服務,但如果認證失敗的話就會傳回其他代碼,而這些代碼的意義我會在下面做解釋
- BadAuthentication:帳號或密碼錯誤
- NotVerified:此帳戶尚未驗證
- CaptchaRequired:缺少驗證碼
- Unknown:未知錯誤
- AccountDeleted:該用戶被刪除
- AccountDisabled:該用戶被禁用
- ServiceDisabled:指定的Google服務不存在
- ServiceUnavailable:指定的服務無法連線,稍後在試
PHP-ClientLogin範例
下載點:Box.net|Dropbox|Google|4Shared
程式碼:
$connect=curl_init(); //建立curl
$user="[email protected]"; //設定帳號
$passwd=""; //設定密碼
$service="cl"; //設定要認證的服務
curl_setopt($connect,CURLOPT_URL,"https://www.google.com/accounts/ClientLogin?accountType=HOSTED_OR_GOOGLE&Email=$user&Passwd=$passwd&service=$service");
curl_setopt($connect,CURLOPT_RETURNTRANSFER,true); //設定以字串格式傳回資料
curl_setopt($connect, CURLOPT_SSL_VERIFYHOST, true); //設定使用SSL連線
curl_setopt($connect, CURLOPT_SSL_VERIFYPEER, false); //設定使用SSL連線
$re=curl_exec($connect); //進行連線並將回傳值存在$re中
$re=explode("n",$re); //將資料解析
echo $re[2]; //顯示Auth
curl_close($connect); //關閉curl
這樣傳送去接收,如果有惡意人士將密碼儲存不就危險了0.0
所以要自己去考慮該不該相信他~
這就是ClientLogin的缺點