0

我一直在遵循基本的 OAuth 2.0教程来创建 OAuth 2.0 服务器。整个部分运行良好,但是当我尝试在此页面之后的 Google OAuth2 游乐场中使用它时,我遇到了一些错误。

我已经按照上面链接中的所有步骤进行操作,但我将http://localhost/wordpress/authorize.php?state=xyz其用作我的授权端点,否则我会收到一条错误消息,指出需要状态并且我还不想编辑任何代码。

现在,授权 API 似乎一切正常。我被定向到我的本地主机站点,当我授权请求时,我将返回到 OAuth2 Playground。当我继续下一步并尝试将返回的授权代码交换为令牌时,我收到 400 错误。

整个请求/响应如下:

POST /wordpress/token.php HTTP/1.1
Host: localhost
Content-length: 191
content-type: application/x-www-form-urlencoded
user-agent: google-oauth-playground

code=6d408c28d468db6586320bff3aacf16492489b67&redirect_uri=https%3A%2F%2Fdevelopers.google.com%2Foauthplayground&client_id=newclient&scope=& client_secret=newpass&grant_type=authorization_code
______________________________________________________________________

HTTP/1.1 400 Bad Request
Content-length: 106
Content-type: text/plain

An error occured while connecting to the server: Unable to fetch URL: http://localhost/wordpress/token.php

这可能是我最终犯的一个简单错误,但我似乎无法弄清楚。我不认为代码真的有问题,因为当我在教程页面上进行测试时,一切正常。我也没有编辑示例使用的库中的任何文件。如果需要,我可以编辑此帖子以包含代码以符合链接可能变为非活动状态的规则。

我注意到有关请求的一件事就是这一点&scope=&client_secret=newpass&grant_type=authorization_code。看起来没有范围参数集,我在想这可能会弄乱结果。

如果有人对 OAuth 或 OAuth2 Playground 有任何经验并且可以帮助我找出问题出在哪里,我将非常感激。另外,我为这个冗长的问题道歉,但我想尽可能多地提供信息。

4

1 回答 1

0

发生这种情况是因为您将 OAuth 服务器托管在不可访问的网络(例如 localhost)上。基本上,当 oauth 游乐场尝试将代码交换为令牌时,它会使用自己的服务器(不使用网页上的 XHR)进行此操作,并且该服务器无法使用 URL 访问您的机器http://localhost...

要使用 Playground 进行测试,您需要使您的 OAuth 2.0 服务器可通过公共 URL 或 IP 地址访问。您可以做的是将本地服务公开给外部/互联网。为此,您可以使用ngroklocaltunnel之类的服务,您将获得本地服务的公共 URL,您可以使用该 URL 设置 Playground。

于 2015-10-06T11:27:38.153 回答