很多的網站提供OAuth 的認證服務, 包含Facebook,Google, Yahoo 等. 那到底什麼是OAuth 認證?
OAuth( Open Authorization)是一個開放標準,允許使用者讓第三方應用存取該使用者在某一網站上儲存的私密的資源(如相片,影片,聯絡人清單),而無需將使用者名稱和密碼提供給第三方應用。
- OAuth允許使用者只提供一個 Access Token,而不是使用者名稱和密碼來存取他們存放在特定服務提供者(Service Provider)的資料, 如Goolge Picasa 網路相簿 。
- 用戶端應用程式(Client Application)利用取得的Access Token (有token 表示已獲得使用者授權), 存取某一個使用者私有且受保護的資源。
- 用戶端應用程式只要利用 HTTP 協定即可使用 OAuth 服務
- Token 會在應用程式每次向服務要求資源時,由用戶端應用程式提交以驗證權限,即每一次送出的在HTTP Request Header Authorization 標頭資料中都必須帶有Access Token。
- When using OAuth 2, all requests must be made over HTTPS.
- Access Token 是有時效性, 過期後要再重新取得Access Token。
- Access Token 除了時效性外,也可以定義Scope , 也就是存取範圍或權限。
Google APIs 使用OAuth 2.0 協定來作為認證與使用者識別, 針對Web Server (PHP, Java, Python,Ruby, ASP.NET), Android APP程式或Web 劉覽器網路程式 (如Javscrip應用程式)。用戶端應用程式要獲得Client Credentials (用戶程式識別), 然後向
Authorization Server 請求以獲得token, 然後用你用的每一個google API 都要帶有這個token
Authorization Server 請求以獲得token, 然後用你用的每一個google API 都要帶有這個token
使用Google's OAuth 2.0 Authorization 程序:
- 先去Google Developers Console 註冊你的程式專案, 獲得用戶程式識別, 即取得2個重要資訊, Client id,Client Secret 該Google 知道你這隻程式。還有其他值,如redirect_URI , 這些會依據申請不同種類的Client 會有所差異。
去Google Developers Console 建立新的用戶端ID - 在你的應用程式裡,將使用者Redirect 到Google 登入頁面 (Redirect 含client_id, redirect_uri等資訊)
- 你的應用程式獲得使用者認證後, Goolge Authorization Server傳回authorization code
按下 "接受後"就代表使用者充許你的存取 - 你的應用程式再用authorization code向Google Authorization Server 去換取一個Access Token, 此請求也會包含scope 欄位, 因為不同的scope 將決定了所得到的Access Token的使用權限與範圍。(scope用來區分,這個Access Token 可以存取 Google+,Google Docs,Google Fusion Table, Google Map等 )
- Google Authorization Server 回傳Access Token 及Refresh Token以及Access Token Lifetime
- 之後每次存取Google的資料, Google API都要代入Access Token (放在HTTP Header中)
- Access Token過期後,用Refresh Token 重新取得新的Access Token
以上流程你可以試著使用 Google OAuth 2.0 Playground 了解整個流程.
Google OAuth 2.0 Playground |
文件參考
- https://developers.google.com/identity/protocols/OAuth2InstalledApp
- 使用 Google fusion tables
沒有留言 :
張貼留言