有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何将google api访问令牌从java服务器传递到gapi javascript客户端?

我能够使用运行在Tomcat中的Java AuthorizationCodeFlow获取凭据

现在,我正试图将我在服务器上获得的访问令牌传递回客户机,以便我们能够使用gapi javascript客户机在浏览器中执行工作,而无需通过服务器

我使用以下方法在gapi中设置访问令牌:

function setAccessToken() {
    gapi.auth.setToken({
        access_token: '<access_token from server>'
    });
}

然后我给gapi打电话。客户加载以获取驱动器客户端代码:

gapi.client.load('drive', 'v2', onDriveClientLoaded);

然后我调用一个函数来获取或创建GoogleDrive中的文件夹(这已经使用gapi.auth.authorize()进行了测试,因此我知道代码应该可以正常工作)

function onDriveClientLoaded() {
    getOrCreateFolder();
}

但在getOrCreateFolder中,当我调用gapi时。客户驾驶儿童列表(…)答案是

{
    code: 401,
    message: "Invalid Credentials",
    ...
}

我见过很多地方有人表示他们这样做过。但到目前为止,我还不能让它工作

在fiddler中,我得到了以下回应:

HTTP/1.1 401 Unauthorized
Vary: Origin
Vary: X-Origin
WWW-Authenticate: Bearer realm="https://accounts.google.com/", error=invalid_token
Content-Type: application/json; charset=UTF-8
Date: Fri, 01 May 2015 20:16:22 GMT
Expires: Fri, 01 May 2015 20:16:22 GMT
Cache-Control: private, max-age=0
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Server: GSE
Alternate-Protocol: 443:quic,p=1
Content-Length: 249

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

以下是略作编辑的请求:

GET https://content.googleapis.com/drive/v2/files/root/children?q=title%20%3D%20%27TestFolder%27 HTTP/1.1
Host: content.googleapis.com
Connection: keep-alive
Authorization: Bearer <access_token from server>
X-Goog-Encode-Response-If-Executable: base64
X-Origin: http://localhost:8080
X-ClientDetails: appVersion=5.0%20(Windows%20NT%206.1)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F42.0.2311.90%20Safari%2F537.36&platform=Win32&userAgent=Mozilla%2F5.0%20(Windows%20NT%206.1)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F42.0.2311.90%20Safari%2F537.36
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36
X-JavaScript-User-Agent: google-api-javascript-client/1.1.0-beta
X-Referer: http://localhost:8080
Accept: */*
X-Chrome-UMA-Enabled: 1
X-Client-Data: CKu1yQEIhLbJAQijtskBCKm2yQEIxLbJAQiiicoBCImSygE=
Referer: https://content.googleapis.com/static/proxy.html?jsh=m%3B%2F_%2Fscs%2Fapps-static%2F_%2Fjs%2Fk%3Doz.gapi.en.OuOrzZ8GQcU.O%2Fm%3D__features__%2Fam%3DIQ%2Frt%3Dj%2Fd%3D1%2Ft%3Dzcms%2Frs%3DAGLTcCO9uGNmv6wlfXBJwCbYRCdcqx94WQ
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
If-None-Match: "dM4Z0GasI3ekQlrgb3F8B4ytx24/sCBysa-CxrZGnYdsTvea7yHHhJ0"

共 (1) 个答案

  1. # 1 楼答案

    事实证明,一切都按预期进行。 我需要查看令牌的刷新,因为我使用的access_令牌无效,因此出现了“Invalid Credentials”消息

    我通过在postman中放置以下内容来测试access_令牌:

    https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=<access_token>
    

    当使用不正确的访问令牌时,我得到了无效凭据响应,但当我刷新令牌时,我得到了以下有效响应:

    {
     "issued_to": "<some_id>.apps.googleusercontent.com",
     "audience": "<some_id>.apps.googleusercontent.com",
     "scope": "https://www.googleapis.com/auth/drive",
     "expires_in": 3470,
     "access_type": "offline"
    }