簡體   English   中英

在會話中保存 OAuth 令牌是否正確?

[英]Is it correct to save OAuth tokens in sessions?

我想知道將訪問令牌保存在 session 中是否是個好主意。

我正在開發一個需要 Google OAuth 訪問令牌(以下文檔)才能使用日歷的應用程序。

$client = new Google_Client();
$client->setAuthConfig('credentials.json');
$client->setAccessType('offline');
$client->addScope(Google_Service_Calendar::CALENDAR_EVENTS);

$redirect_uri = 'https://...';
$client->setRedirectUri($redirect_uri);
if (! isset($_GET['code'])) {
  $auth_url = $client->createAuthUrl();
  header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL));
} else {
  $client->authenticate($_GET['code']);
  $_SESSION['access_token'] = $client->getAccessToken();
  header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
}

$client->setAccessToken($_SESSION['accessToken']);

/* Refresh token when expired */
if ($client->isAccessTokenExpired()) {
    // the new access token comes with a refresh token as well
    $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
}
$service = new Google_Service_Calendar($client);
...

並非總是用戶會登錄到我的站點,因此我無法識別用戶,因此將令牌保存在 session 中是否是一個好習慣? 當我可以識別他時,我可以將他的令牌保存到數據庫中,還是按照模式將所有內容留在 session 中更好?

用戶會話可以按照您喜歡的任何方式構建。

您的目標是為正確的用戶使用正確的 OAuth 令牌。

您可以通過為用戶創建 Session 並將令牌存儲在那里來做到這一點,但是,這些會話可能比您存儲在其中的令牌更早到期。

您還可以將刷新令牌存儲在數據庫中,並僅存儲一個參考號(自定義 ID),以幫助您將 session 與您所服務的用戶聯系起來。 如果您已經有一個用戶帳戶結構,這將很有用。

如果您想更多地了解您的情況,這份官方文檔是一本有趣的書。

暫無
暫無

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

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