我目前正在实施服务器端 OAuth2 流程以授权我的应用程序。
JS 应用程序将代表注册的 CMS 帐户向最终用户(拥有与 CMS 帐户合作的频道)显示 YouTube 分析数据。因此,授权阶段需要对用户完全隐藏。我试图授权一次,然后在需要时使用“永久”授权代码来检索访问令牌。
我能够成功授权并检索访问代码。当我尝试将访问代码交换为令牌时,问题就开始了。
实现此目的的 HTTP POST 请求需要如下所示...
POST /o/oauth2/token HTTP/1.1
Host: accounts.google.com
Content-Type: application/x-www-form-urlencoded
code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7&
client_id=8819981768.apps.googleusercontent.com&
client_secret={client_secret}&
redirect_uri=https://oauth2-login-demo.appspot.com/code&
grant_type=authorization_code
我正在使用这段代码来实现这一点:
var myPOSTRequest = new XMLHttpRequest();
myPOSTRequest.open('POST', 'https://accounts.google.com/o/oauth2/token', true);
myPOSTRequest.setRequestHeader('content-type', 'application/x-www-form-urlencoded');
myPOSTRequest.send('code=' + myAuthCode + '&redirect_uri=http%3A%2F%2Flocalhost%2FCMSAuth3.html&client_id=626544306690-kn5m3vu0dcgb17au6m6pmr4giluf1cle.apps.googleusercontent.com&scope=&client_secret={my_client_secret}&grant_type=authorization_code');
我可以成功获得对此请求的 200 OK 响应,但是没有返回访问令牌,并且 myPOSTRequest.responseText 返回一个空字符串。
我玩过 Google 的 OAuth Playground - 并且可以使用我自己的凭据成功获取令牌。
我在这里错过了什么吗?