簡體   English   中英

如何在谷歌 oauth api javascript 中重置 id_token

[英]How to reset id_token in google oauth api javascript

我一直在我的網站上創建一個谷歌登錄 這是我的代碼:

function gmailLogin(userInfo)
{
//geting the id_token
var token_id = gapi.auth2.getAuthInstance().currentUser.get().getAuthResponse().id_token;

jQuery.ajax({
    url: "functions/login_check.php",
    type: "post",
    data: {token_id: token_id},
    success: function(data)
    {
        //do something if success
        $('#console').html(data);
    }
});
}

我使用PHP curl通過這個id_token驗證帳戶,一切正常。

這是我的 php 代碼:

    //token I got from the page previously using ajax
    $token_id = $_POST['token_id'];
    
    $verifyResponse = file_get_contents('https://oauth2.googleapis.com/tokeninfo?id_token='.$token_id);
    $response = json_decode($verifyResponse);
    
    if(isset($response->email_verified))
    {
      //do stuff
    }

但是,由於id_token永遠保持不變 它可能導致安全漏洞 有沒有辦法使用PHPJavascript 重置此 id_token 如果沒有,是否有任何其他方法可以輕松實現此登錄系統(無需任何外部庫和 php)?

id_token 是一個 JWT 壽命短。 谷歌將其設置為 1 小時。 您可以通過獲取 JWT 並將其放在https://jwt.io 上來驗證它。

google的openid配置在那里: https://accounts.google.com/.well-known/openid-configuration 你有一個撤銷端點來做你需要的事情。

在您的 php 代碼中,我沒有看到您必須對 id_token 進行的驗證:

  • 是 JWT
  • 驗證簽名(為此使用 JWKS 端點)
  • 驗證它是否過期(“exp”聲明)
  • 驗證 iss 是否良好
  • 驗證 aud 聲明

如果您不想對 PHP 代碼進行這些驗證(因為已經使用 google 的 js api 完成),請不要將 id_token 發送到后端。 發送 access_token。 它具有與 id_token 相同的生命周期。 您可以使用它通過端點 userinfo 獲取用戶信息。 您也可以撤銷它。

對於 web 應用程序來說,令牌的生命周期一定不是問題。 通過 google 驗證並驗證令牌信息后,您的應用需要使用 session 並使用它。

暫無
暫無

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

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