簡體   English   中英

Google+登錄:驗證會話用戶

[英]Google+ sign-in: authenticating session users

我對在網站中整合Google+登錄按鈕有疑問。

我的問題是,在signinCallback中獲得的google訪問令牌有效期有多長? 這個到期時間是否靈活? 我可以多次使用它在到期前從谷歌中提取用戶信息嗎?

我的另一個問題是,我應該如何在登錄期間保持會話? 我已經想過以下方法,

  1. 使用我們自己的會話:從Google獲取用戶身份驗證,在登錄回調時,設置自定義應用程序Cookie以驗證進一步的通話。 問題:如果用戶從gmail等其他谷歌服務注銷,我的會話不會終止。
  2. 使用Google訪問令牌作為會話密鑰:每次請求任何PHP時,都要驗證Google訪問令牌。 問題:我必須向google API發出一個額外的HTTP請求來驗證每個PHP調用。 它會使我的應用程序有點慢。
  3. 在每個PHP的客戶端利用signinCallback:在signinCallback函數中,如果用戶無效,則拒絕他訪問頁面。 問題:不是100%安全。 用戶可以在客戶端修改我的signinCallback並繞過谷歌會話驗證。 然后即使從谷歌退出后他也可以享受會話。

還有另一種權利和更安全的方式嗎? 請注意,我的網站是簡單的HTML 4.0網站,它幾乎執行服務器端的每個操作。 幾乎沒有Javascript,用戶i / o由表單執行。 所以服務器端技術更受贊賞:)

在signinCallback中獲得的google訪問令牌有效期多長?

3600秒(1小時)

這個到期時間是否靈活?

不會。訪問令牌將在一小時后過期。 但是,您可以使用刷新令牌將過期的訪問令牌替換為新令牌。 為此,您必須在登錄按鈕上請求脫機訪問,將一次性授權代碼發送到您的服務器,並交換授權代碼以獲取訪問令牌和刷新令牌。

我可以多次使用它在到期前從谷歌中提取用戶信息嗎?

除非用戶與您的應用斷開連接,否則您將能夠獲得新的訪問權限並進行API調用。

登錄時如何保持會話?

使用您自己的網站會話來維護您網站的用戶狀態。 聽起來您已經在您的網站上有會話,如果會話存在並且包含您的網站所需的任何授權密鑰,則應該授權用戶。

使用Google訪問令牌作為會話密鑰:

請不要這樣做,您需要保護用戶的訪問令牌。 您可以做的一件事是稍微安全一點,就是從登錄回調中傳遞訪問令牌,然后驗證它對應於服務器上的會話緩存用戶。

一個更好的方法

這真的是你應該做的。 使用登錄按鈕回調確定用戶未登錄,並在用戶未登錄時使其無效。 將回撥中的ID令牌或一次性授權碼傳遞給您的服務器,以驗證您的用戶身份。 以下代碼顯示了您調用錯誤條件的平均登錄回調:

function onSignInCallback(authResult) {
  if (authResult['access_token']) {
    // User is signed in.
  } else if (authResult['error']) {
    // There was an error, which means the user is not signed in.
    // As an example, you can handle by writing to the console:
    console.log('not signed in, invalidating session');          
  }
  console.log('authResult', authResult);
}

如您所知,authResult對象包含成員access_token和id_token。 將這些令牌發送到OAuth.v2.verifytoken端點將檢查令牌證書是否有效且令牌是否已過期。 Verifytoken還將為您返回一個唯一的標識符,您可以使用該標識符來驗證用戶未使用錯誤的會話。

Google+ PHP快速入門向您展示了如何將授權代碼發送到您的服務器,接受並交換代碼,驗證令牌等等

所以,你應該做的是:

  1. 在客戶端身份驗證上將OAuth 2憑據傳遞給您的服務器
  2. 驗證服務器上的憑據,並在用戶會話失敗時斷開連接
  3. 用戶通過身份驗證后,依靠您的站點會話
  4. 如果您想在用戶退出Google時簽署該用戶,請在每次加載頁面時檢索OAuth 2憑據,並在每個請求上傳遞令牌(ID /訪問/一次性代碼)並進行驗證。

現在使用偵聽器或gapi.auth2.getAuthInstance()。currentUser.get()。reloadAuthResponse()與登錄按鈕請求脫機訪問的整個過程,將一次性授權代碼發送到您的服務器,以及交換訪問令牌的auth代碼並刷新令牌。

請參閱https://developers.google.com/identity/sign-in/web/listenershttps://developers.google.com/identity/sign-in/web/reference#googleuserreloadauthresponse

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM