[英]Save OAuth WRAP access tokens directly on client machine in a cookie?
[英]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.