如何永久使用 oauth2 令牌?
how to use oauth2 token permanently?
我想在我的网站上永久使用 oauth2 令牌。
使用 google API,当用户授予管理其 google 日历的权限时,我将从 google API 获取访问令牌。我想把它保存在数据库里,用到最后。
但是它越来越无效了。我尝试使用 oauth2 刷新令牌 API 刷新令牌。但是报错如下。
Array ( [error] => invalid_grant [error_description] => Token has been expired or revoked. )
不想让用户每次进入网站都给权限
我还希望管理员需要使用此令牌或任何其他方式访问用户的日历。
我怎样才能做到这一点?
底线是您无法获得永久令牌 - 但您可以减少用户重新提供凭据的需要。
解决方案取决于您使用的授权类型(这在很大程度上取决于您的应用程序是在服务器上运行还是在最终用户的计算机上运行)。您提到了一个网站,所以希望您使用的授权类型也是 returns 刷新代码。
如果您的应用程序在服务器上运行并且您通过 authorisation code grant
获得令牌,那么您在获得访问令牌时也应该能够获得刷新令牌。您可以使用该刷新令牌在后台通道上请求新的 refresh/access 令牌,而无需您的用户或他们的凭据。
实际上,如果用户未撤销访问权限,那么您应该可以长期访问用户的 google 资源。
如果您使用其他授权类型,例如 implicit grant
,则您无法获得刷新令牌。您将需要定期获取新的访问令牌。如果您的用户在您的应用 运行 所在的设备上保持登录 google,那么当您请求新的访问令牌时,他们不应该被要求提供他们的 google 凭据,所以您不会经常缠着他们索要凭据。
我正在使用刷新令牌选项,而不是尝试获取永久令牌。
当我使用标签调用google日历时,我添加了如下参数"access_type=offline"
$login_url = 'https://accounts.google.com/o/oauth2/auth?scope=' . urlencode('https://www.googleapis.com/auth/calendar') . '&redirect_uri=' . CLIENT_REDIRECT_URL . '&response_type=code&client_id=' . CLIENT_ID . '&access_type=offline';
在用户允许后,我将得到 access_token 和 refresh_token 作为响应。我正在将它们保存在数据库中。然后每次,当管理员访问用户的日历时,将通过 refresh_token api 调用使用存储在数据库中的 refresh_token 获取新的 access_token 直到用户在我的站点中使用取消同步选项。
一旦用户取消同步日历,我将更新数据库。
问题已解决。
我想在我的网站上永久使用 oauth2 令牌。
使用 google API,当用户授予管理其 google 日历的权限时,我将从 google API 获取访问令牌。我想把它保存在数据库里,用到最后。
但是它越来越无效了。我尝试使用 oauth2 刷新令牌 API 刷新令牌。但是报错如下。
Array ( [error] => invalid_grant [error_description] => Token has been expired or revoked. )
不想让用户每次进入网站都给权限
我还希望管理员需要使用此令牌或任何其他方式访问用户的日历。
我怎样才能做到这一点?
底线是您无法获得永久令牌 - 但您可以减少用户重新提供凭据的需要。
解决方案取决于您使用的授权类型(这在很大程度上取决于您的应用程序是在服务器上运行还是在最终用户的计算机上运行)。您提到了一个网站,所以希望您使用的授权类型也是 returns 刷新代码。
如果您的应用程序在服务器上运行并且您通过 authorisation code grant
获得令牌,那么您在获得访问令牌时也应该能够获得刷新令牌。您可以使用该刷新令牌在后台通道上请求新的 refresh/access 令牌,而无需您的用户或他们的凭据。
实际上,如果用户未撤销访问权限,那么您应该可以长期访问用户的 google 资源。
如果您使用其他授权类型,例如 implicit grant
,则您无法获得刷新令牌。您将需要定期获取新的访问令牌。如果您的用户在您的应用 运行 所在的设备上保持登录 google,那么当您请求新的访问令牌时,他们不应该被要求提供他们的 google 凭据,所以您不会经常缠着他们索要凭据。
我正在使用刷新令牌选项,而不是尝试获取永久令牌。
当我使用标签调用google日历时,我添加了如下参数"access_type=offline"
$login_url = 'https://accounts.google.com/o/oauth2/auth?scope=' . urlencode('https://www.googleapis.com/auth/calendar') . '&redirect_uri=' . CLIENT_REDIRECT_URL . '&response_type=code&client_id=' . CLIENT_ID . '&access_type=offline';
在用户允许后,我将得到 access_token 和 refresh_token 作为响应。我正在将它们保存在数据库中。然后每次,当管理员访问用户的日历时,将通过 refresh_token api 调用使用存储在数据库中的 refresh_token 获取新的 access_token 直到用户在我的站点中使用取消同步选项。
一旦用户取消同步日历,我将更新数据库。 问题已解决。