我正在尝试将OAuth 2.0用于我的网站上的Google + API,但我一直在获取:

{
    "error": {
        "errors": [{
            "domain": "global",
            "reason": "authError",
            "message": "Invalid Credentials",
            "locationType": "header",
            "location": "Authorization"
        }],
        "code": 401,
        "message": "Invalid Credentials"
    }
}

问题是,我不知道为什么会发生这种情况。我有Google的有效访问令牌,但是Google告诉它是无效的。我知道令牌没有到期,因为JSON数据是在获得访问令牌的10秒内请求的。这是我正在使用的过程:

  1. 让用户授权请求。
  2. 从Google获取请求代码。
  3. 用途 cUrl 请求使用Google的请求代码请求访问令牌。
  4. 将访问代码放入PHP会话中。
  5. 重定向回到主页。
  6. 主页检测会话变量已设置,并且不显示登录链接。
  7. 主页上的PHP用途 readFile 从Google那里获得JSON响应。
  8. Google返回无效的凭据。

这是PHP生成的URI示例,该示例已插入ReadFile:

https://www.googleapis.com/plus/v1/people/me?prettyprint=true&access_token=ya29.ahes6zqrgovda5fhsoju3qccm1denymjpywzpywz1muue4cwgh5n70ocakw

请帮忙?

有帮助吗?

解决方案

您是否尝试过Google API客户端之一?您可以使用一些入门应用程序来滚动。

https://developers.google.com/+/downloads

其他提示

您不应该共享一个不变的访问令牌 - 有人可以使用它来模仿您(实际上是为了被授予的任何人)。

最好将验证令牌作为标头传递,例如:

curl -H "Authorization: OAuth ya29.xyzxyz" "https://www.googleapis.com/plus/v1/people/me"

不确定这是否是必不可少的,但是您的错误消息似乎表示标题中的验证错误,因此您可能会提供一个不符合所需的授权标题。

这是使用PHP的解决方案 Pecl Oauth 扩大。将以您定义的方式签署请求。在这种情况下,在脚本中导入的配置文件json对象中。

        $oauth = new OAuth($this->config->consumer_key, $this->config->consumer_secret, $this->config->signature_method, $this->config->auth_type);
        $oauth->setVersion($this->config->version);
        $oauth->setToken($accessToken->oauth_token, $accessToken->oauth_token_secret);

        $params = array(
            'fields' => 'displayName,emails,id,image,name',
            'pp' => 1
        );

        $oauth->fetch('https://www.googleapis.com/plus/v1/people/me', $params, OAUTH_HTTP_METHOD_GET);

        // extract response
        $json = Zend_Json::decode($oauth->getLastResponse(), Zend_Json::TYPE_OBJECT);

我以前有这个问题,但是有Twitter。

对于Oauth实际上,我们两次与Twitter进行沟通,首先要获取请求令牌,其次是授权发送已经签署的第一个令牌。也许您只能克服第一。

几个小时,我一直在遇到相同的401“无效凭据”错误。比我注意到我将Access_Token存储在VARCHAR(50)字段中的数据库中。它切断了Access_Token的一部分。我增加了列长度。固定的。

仔细检查数据库中的字段长度,您可以在其中存储access_token以及Refresh_token!

我觉得 me API被打破了。当我尝试请求具有真实用户ID的URI时,问题就消失了。我的意思是这样: https://www.googleapis.com/plus/v1/people/108189587050871927619?key={your_api_key}

删除您的 token.json 文件,然后再次尝试请求。

对我来说,问题是get/post请求的标题“授权”:

Google文档说:授权: / * Oauth 2.0在这里 * /

但是正确的是:授权:oauth / * oauth 2.0在这里 * /

是的!在您的令牌键之前包括“誓言”!

如果您使用的是卷曲(PHP),请使用:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: OAuth '.$_SESSION['access_token'], 'Content-Type: application/json'));
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top