【问题标题】:OAuth flow with refresh tokens. Error 500带有刷新令牌的 OAuth 流。错误 500
【发布时间】:2013-06-08 18:09:21
【问题描述】:

我正在制作一个 PHP 应用程序,它将使用单个 google 驱动器帐户。

因此,作为管理员,我首先授予 google drive 帐户的权限。 接受权限后,我将刷新令牌保存在数据库中。

之后,在客户端将使用的不同 URL 中,我正在尝试进行身份验证。

接下来,我从数据库中提取刷新令牌,然后向:

$url = "https://accounts.google.com/o/oauth2/token";

带参数:

$post_data = array(
    'client_id' => CLIENT_ID,
    'client_secret' => CLIENT_SECRET,
    'refresh_token' => $refreshToken,
    'grant_type' => 'refresh_token' );

在获得成功响应后,我保存了 access_token,但是当我尝试将其交换为凭据时,我收到以下错误消息:

An error occurred: Error fetching OAuth2 access token, message: '    
Error processing OAuth 2 request

Error 500
'
Fatal error: Uncaught exception 'CodeExchangeException' in ...

我在这里遗漏了什么吗? 我使用的oauth流程是否正确?

提前致谢!

【问题讨论】:

    标签: php google-drive-api google-oauth


    【解决方案1】:

    当您从刷新令牌中获取访问令牌时,该访问令牌本身就是一个凭证,之后没有交换过程。在凭证中,有: 1. 访问令牌 2. 刷新令牌。并且您获得凭证以交换授权代码,而不是访问令牌。因此,在您的代码中,尝试获取访问令牌以交换访问令牌的过程中发生了错误。

    【讨论】:

    • 谢谢您的回复。因此,使用刷新令牌我得到一个包含 access_token 和 id_token 的 json obj。我应该如何处理这个 json obj?将其传递给构建服务?
    • 我不确定如何处理该 json 对象。但是,在某处应该有一些关于刷新令牌的抽象。我不太确定 google-api-php-client,但是在 google-api-python-client 中,如果令牌过期,Credentials.authorize 会自动尝试为您刷新令牌,因此从开发人员级别来看,他们甚至不会不得不为提神而烦恼。应该有一些关于刷新的抽象实现,你不必自己处理。我建议您仔细查看文档,而不是自己处理刷新。
    猜你喜欢
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    • 2017-11-20
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 2016-03-31
    • 2012-12-21
    相关资源
    最近更新 更多