2014-03-12 69 views
2

我試圖圍繞G +登錄流程進行打包,但我不確定自己是否正確。使用Google+流量登錄

我主要在看this page

凡在流,我可以連接到我自己的數據庫和取東西,如用戶名和權限,那我應該爲標識存儲在我的數據庫(快速確定他們下一次登錄)?我應該與G + API交談並獲得他們的G + ID,然後將其與我想存儲的關於用戶的數據一起存儲?

流程第二次登錄時該怎麼看? 我需要一些最終會給我的G + ID(如果我使用的話),以便我可以在我的數據庫中找到它們。

回答

3

使用Google+ API調用的最快方式是the Google+ Quickstarts。這些示例將使您隨代碼準備好複製並粘貼到您的應用程序中。我將很快討論在應用程序中演示的流程。

與OAuth 2.0一樣,目標是獲取不記名令牌(OAuth 2.0中的訪問令牌)來授權API調用。可以通過多種方式檢索令牌,但使用Google+登錄按鈕進行登錄最重要的是代碼交換。

用戶第一次遇到您的網站(我們稱之爲註冊)時,流程將進行代碼交換。代碼交換模式是:

  1. 用戶到達你的網站
  2. 用戶點擊優選授權(Google+登錄)
  3. 用戶呈現同意/授權屏幕
  4. 代碼是從JavaScript返回web客戶端
  5. Web客戶端(HTML/JavaScript)將授權碼傳遞到您的服務器
  6. 服務器交換代碼進行刷新並訪問令牌,然後緩存這些令牌

此時,您的服務器有一個訪問令牌。這意味着您可以根據授予您應用的用戶權限,向Google調用API調用(例如,獲取登錄用戶配置文件的plus.people.get('me'))。

用戶現在應該被授權使用您的服務器,並根據用戶的會話等進行身份驗證。但是,現在您遇到了一個新問題,當用戶再次從新瀏覽器訪問您的網站或以其他方式破壞他們的會話時會發生什麼?

這是轉換到下一個重要流程的好時機:認證(讓我們稱之爲「登錄」)流程。爲了登錄,您應該讓客戶端向您的服務器傳遞身份驗證憑證(也是不記名令牌),然後在爲數據庫中的用戶建立新會話之前驗證憑證。

verify token examples on the Google+ Github page演示發送和驗證ID令牌的簡潔代碼。

讓我們來討論一種傳遞不同類型的不記名令牌(ID令牌)以進行驗證的方法的細節。在您的網站

  • 使用Google+

    1. 用戶登錄登錄按鈕的回調
    2. 客戶安全地傳遞ID令牌服務器
    3. 服務器返回一個ID令牌驗證ID令牌*
    4. 客戶端會話,然後驗證

    爲*最好放在另外一個問題的步驟,但是一組典型的測試includ ES:

    1. 驗證令牌的證書是谷歌的
    2. 驗證客戶端ID爲這個應用程序
    3. 驗證用戶在您網站上的帳戶(可選,這樣做,如果你需要離線訪問)
    4. 驗證令牌沒有過期

    希望能夠解決這兩個問題。

    您應該瞭解一個最終流程,用於離線API訪問,令牌刷新。當您有刷新令牌和過期的訪問令牌時,會發生令牌刷新。對於Google實施的OAuth 2.0,訪問令牌在3600秒(1小時)後過期。由於這些令牌過期,因此當您存儲的訪問令牌到期時,您需要能夠獲得新的訪問令牌。要做到這一點,你通過三個位來谷歌:

    1. 刷新令牌(從交換代碼檢索)
    2. 客戶端ID
    3. 客戶端密鑰(再次,從Google developer console檢索)(從Google developer console檢索)

    這些部分被傳遞到Google OAuth服務器,然後服務器將返回一個新的訪問令牌,您可以將其用於脫機API訪問。

    有豐富的信息在這個題目,還看到:

  • +0

    這正是我想要的答案,感謝澄清一切,尤其是驗證部分(錯過了那個)!你是否建議我安裝並使用他們的「google-api-python-client」(開發和生產)或者我應該寫我自己的請求?編輯:看到你爲谷歌工作,所以我認爲這是一個(哈哈)! – fgblomqvist

    +0

    @fgblomqvist - 是的,Google的客戶端庫是要走的路。對於Python來說,這更符合實際情況,因爲客戶端庫不在Beta版中,這意味着它得到了Google的支持。 – class

    +0

    我注意到這個庫不適用於Python 3.我想我必須從頭開始對它進行編碼。 – fgblomqvist