[英]Google+ sign-in: authenticating session users
我對在網站中整合Google+登錄按鈕有疑問。
我的問題是,在signinCallback中獲得的google訪問令牌有效期有多長? 這個到期時間是否靈活? 我可以多次使用它在到期前從谷歌中提取用戶信息嗎?
我的另一個問題是,我應該如何在登錄期間保持會話? 我已經想過以下方法,
還有另一種權利和更安全的方式嗎? 請注意,我的網站是簡單的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快速入門向您展示了如何將授權代碼發送到您的服務器,接受並交換代碼,驗證令牌等等 。
所以,你應該做的是:
現在使用偵聽器或gapi.auth2.getAuthInstance()。currentUser.get()。reloadAuthResponse()與登錄按鈕請求脫機訪問的整個過程,將一次性授權代碼發送到您的服務器,以及交換訪問令牌的auth代碼並刷新令牌。
請參閱https://developers.google.com/identity/sign-in/web/listeners和https://developers.google.com/identity/sign-in/web/reference#googleuserreloadauthresponse 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.