簡體   English   中英

如何驗證客戶端 google+ 登錄信息?

[英]How do I validate a client-side google+ login?

因此,按照此處的基本教程 ( https://developers.google.com/+/web/signin/javascript-flow ),您可以輕松地為 google 帳戶添加客戶端登錄。

通過修改代碼查詢/people/me,如下:

function signinCallback(authResult) {
  if (authResult['status']['signed_in']) {
    gapi.auth.setToken(authResult);
    gapi.client.load('plus','v1', function(){
      var request = gapi.client.plus.people.get({
        'userId': 'me'
      });
      request.execute(function(resp) {
        console.log(resp);
      });
  });
}

您可以訪問基本帳戶信息; 用戶 ID、圖像、名稱等。

您還有來自 oauth 登錄名的有效訪問令牌。

現在,除非您有一個完全客戶端的應用程序,否則您將不得不通知服務器用戶已登錄,以獲取該用戶的應用程序數據。

我想要做的是 POST 到 /login/gauth {'access_token': ..., 'user_id': ....} 它將響應一個 auth cookie 並重定向回來; 除了現在我們有一個持久的本地身份驗證令牌,我們可以用它來識別用戶。

在服務器上,我需要做的是使用訪問令牌訪問相同的 REST api (/people/me),並驗證它返回的用戶 ID; 任何其他提供的信息都可以在客戶端偽造。

問題是,我在服務器端找不到任何驗證/使用訪問令牌的方法。

我可以在服務器上設置一個新的 OAuth 登錄,並執行僅服務器登錄過程,但這相當復雜,而且考慮到我已經有一個有效的訪問令牌,這似乎很浪費。

我如何使用它?

您可能想要使用https://developers.google.com/+/web/signin/server-side-flow 中概述的混合流程。 在此流程中,您的客戶端執行的操作與現在大致相同,但您的客戶端還會獲得一個短期“代碼”,它應該通過安全通道將其傳遞給服務器。 然后,服務器根據服務器驗證這一點,以獲得自己的訪問(可能還有刷新)令牌。 這比客戶端嘗試發送 access_token 更安全,因為它減少了中間人可以利用它的窗口,並且只能使用一次,從而減少了機會。

接受的答案中的細節是正確的,但有一種更簡單的方法,它只是含糊地暗示,而不是實際陳述,但如果您仔細閱讀,它會出現在示例代碼中。

關鍵是:

https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=TOKEN

當 TOKEN 是客戶端訪問令牌時。 這將返回一個像這樣的 json 塊:

{u'access_type': u'online',
 u'audience': u'...',
 u'expires_in': 3475,
 u'issued_to': u'...', <--- The client ID; use this to verify access token
 u'user_id': u'1234567890', <--- The unique google user id 
 u'scope': u'https://www.googleapis.com/auth/userinfo.profile')

請注意,這只是驗證:

  • 令牌有效(即用戶登錄)
  • user_id <--> access_token 綁定是有效的(不是客戶端黑客成為不同的用戶)
  • 應用程序 ID 是正確的

如果要查詢有關用戶的其他詳細信息,則需要使用 OAuth 庫之一。

在許多情況下,這可能足以唯一標識用戶。

您可以通過驗證服務器上用戶 JWT id_token的真實性,跳過向tokeninfo端點發出網絡請求。 這可以通過使用 Google 的 API 客戶端庫之一輕松完成。

這也使您可以避免在不需要時請求離線訪問代碼。

這是 Google文檔中推薦的方法。

檢查那里以獲取更詳細的說明。

暫無
暫無

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

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