我正在测试我使用Playground编写的OAuth2服务器。 完整配置网址为here。
步骤1(授权授权)完美运行。在Chrome中,我可以看到此请求:
GET https://localhost:8080/oauth2/api/authorize?scope=fp&redirect_uri=https%3A%2F%2Fdevelopers.google.com%2Foauthplayground&response_type=code&client_id=acme1&access_type=offline
步骤2(令牌交换)失败,并显示:
POST /oauth2/api/token HTTP/1.1
Host: localhost:8080
Content-length: 153
content-type: application/x-www-form-urlencoded
user-agent: google-oauth-playground
code=2l0vf6n&redirect_uri=https%3A%2F%2Fdevelopers.google.com%2Foauthplayground&client_id=acme1&client_secret=secret&scope=&grant_type=authorization_code
HTTP/1.1 400 Bad Request
Content-length: 115
Content-type: text/plain
An error occured while connecting to the server: DNS lookup failed for URL: https://localhost:8080/oauth2/api/token
看看网络我可以看到:
POST https://developers.google.com/oauthplayground/exchangeAuthCode
与这个机构:
{"token_uri":"https://localhost:8080/oauth2/api/token","client_id":"acme1","client_secret":"secret","code":"5kns7"}
这是它的工作方式吗? OAuth服务器交互,至少对于令牌交换, 是否在公共网络上?
如果步骤2可以针对本地服务器执行,那将非常有用。有谁知道我们如何才能实现这一目标?
感谢
答案 0 :(得分:0)
OAuth 2.0 Playground在服务器端进行身份验证代码交换请求,因为OAuth服务器通常不允许对此请求发出CORS请求(至少对于auth代码流,他们不应允许CORS请求)。
您可以做的是将您的本地服务暴露给外部/互联网。为此,您可以使用ngrok或localtunnel等服务,并且您将获得本地服务的公开网址,您可以使用该网址设置Playground。