Java 使用jersey客户端调用GoogleOAuth

Java 使用jersey客户端调用GoogleOAuth,java,oauth,jersey,Java,Oauth,Jersey,我正在使用Jersey客户端调用GoogleOAuth获取令牌,如下所示 ClientConfig config = new DefaultClientConfig(); Client client = Client.create(config); WebResource webResource = client.resource(UriBuilder.fromUri("https://accounts.google.com/o/oauth2/token").build()); Multival

我正在使用Jersey客户端调用GoogleOAuth获取令牌,如下所示

ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);
WebResource webResource = client.resource(UriBuilder.fromUri("https://accounts.google.com/o/oauth2/token").build());
MultivaluedMap formData = new MultivaluedMapImpl();
formData.add("code", request.getParameter("code"));
formData.add("client_id", Global.GOOGLE_CLIENT_ID);
formData.add("redirect_uri", Global.GOOGLE_REDIRECT_URL);
formData.add("client_secret", Global.GOOGLE_SECRET);
formData.add("grant_type", "authorization_code");
ClientResponse response1 = webResource.type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).post(ClientResponse.class, formData);
System.out.println(response1.getEntity(String.class));
System.out.println(response1.getClass().getName());
我得到的回应

{“访问令牌”: “ya29.nQCXFIhTs8s-SQKON6NJPV7WKBCJXLASDLKJSDSKLSGUZMMMQYDZ3XPKNLT”,
“令牌类型”:“承载者”,“到期日”:3599,“id令牌”: “Eyjhbgcioijsuzi1niisimtpzci6ijdkzgqwogewm2ynwqwzjvhmdlmjnimjlmtbkzdiyodqyyyg1njkifq.eyjpc3mioijyyjy2njdw5csdldkjdkjdkjdkjdkjdkjdkjzldkjdkjsdkjsdkjsdkjjjjjzkjjzkjsdkjsdkjsdkjsdkjjjjjjjjjkjjjxxxbj987230ioijwcmvcxbzbwwwwwwwwwwwwwpbc5wpbc5jb20izwzwwzwzwzwzwzwwzwwwwzwwzzwzwwwwwwwwzzzz2VYY29UDGVUDC5JB20ILCJPYXQIOJE0MYMTQ4ODISIMV4CCI6MTQMZZYXZYXOD4MN0.pc2Snmb4pRF-U TqylBuEpz0oBoWZsIq-"SqlS06E6DjKgSawWWWWWWWWWWWcG"3VqTi72GVWnO0J8UGHZKKA6RPAOF5RZLxLDS4GV5RZQODBKJEO-5MRPWWWWWWWWWWWWU7SNOYOYOKWWWWWWWWWWWWWWWWWWWWWW


如何从响应中获取id_标记并获取响应中的实际值。

到目前为止实现的最简单的解决方案是使用JSONSerializer获取字符串响应的JSONObject表示形式。代码可能与此类似:

JSONObject jsonOutput = (JSONObject) JSONSerializer.toJSON( response.getEntity(String.class) ); 
String access_token = jsonOutput.getString("access_token");
String id_token = jsonOutput.getString("id_token");
但是,我建议使用google java客户端进行呼叫:

使用GoogleAuthorizationCodeTokenRequest类,您可以直接返回GoogleResponseToken,而不用担心JSON。示例如下:

代码如下所示(直接取自链接):

  GoogleTokenResponse response =
      new GoogleAuthorizationCodeTokenRequest(new NetHttpTransport(), new JacksonFactory(),
          "812741506391.apps.googleusercontent.com", "{client_secret}",
          "4/P7q7W91a-oMsCeLvIaQm6bTrgtp7", "https://oauth2-login-demo.appspot.com/code")
          .execute();
  System.out.println("Access token: " + response.getAccessToken());
  System.out.println("Id token: " + response.getIdToken());