2013-10-20 52 views
7

我正在开发Android应用程序,它基于与服务器的通信,并且我想使用Google(g +)验证机制。谷歌访问令牌服务器端验证Android应用程序

基本上,我认为它应该像这样工作:

  1. 在我的Android应用程序,用户登录到谷歌,用他的电子邮件和密码。
  2. 用户允许访问他的相关Google应用程序的数据。
  3. 我的Android应用程序在成功登录后会收到访问令牌。
  4. 在与我的服务器进一步通信时,我的Android应用程序应该使用收到的Google访问令牌(例如:在查询中)。
  5. 当我的服务器收到来自android应用程序的一些查询,并带有访问令牌时,它应该询问Google此令牌是否有效(以及谁),如果是,服务器应该假定该用户已通过Google验证。

我的问题是:服务器应该如何询问Google给定的访问令牌是否有效?我想我应该以某种方式检查令牌是否对我的android应用有效。

我已经尝试了很多谷歌查询到谷歌API,我发现,但没有任何工作,因为我的预期。你能提供一些例子吗?

+0

我不知道有关的问题。由于你的应用程序直接与谷歌服务器进行通信,因此你的个人服务器在哪里出现?你可以检查你的android应用程序本身的标记有效性。你能详细说明吗? – drulabs

+0

我已经从客户端应用程序(Android)中获取g +的令牌,我将该访问令牌发送到我的服务器,在那个服务器中,我想重新验证从Google发起的访问令牌或者不需要获取用户信息...使用该访问令牌....感谢回复 –

+0

尝试任何操作。像搜索或上传或任何东西,如果令牌是有效的,你会得到答复,否则你会收到一个“未经授权”的回应。通常,令牌每过一小时或用户明确更改Google密码时过期。如果您已正确完成身份验证,则必须使用访问令牌收到刷新令牌。使用此刷新令牌获取新的访问令牌。 – drulabs

回答

1

您可以验证access_token是否有效。

您需要发送GET请求到api终点:https://www.googleapis.com/oauth2/v1/tokeninfo请求您的access_token。

,您可以尝试这样的:

String connection = new ConnectionService().connectionGoogle("https://www.googleapis.com/oauth2/v1/tokeninfo", "access_token=" + "YOUR_EXISTING_ACCESS_TOKEN"); 
     System.out.println(connection); 

在上面的代码中使用的方法是:

public static String connectionGoogle(String url, String parameter) throws MalformedURLException, ProtocolException, IOException { 

     URL url1 = new URL(url); 
     HttpURLConnection request1 = (HttpURLConnection) url1.openConnection(); 
     request1.setRequestMethod("GET"); 
     request1.setDoOutput(true); 
     request1.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
     OutputStreamWriter wr = new OutputStreamWriter(request1.getOutputStream()); 
     wr.write(parameter); 
     wr.flush(); 
     request1.connect(); 
     String responseBody = convertStreamToString(request1.getInputStream()); 
     wr.close(); 
     return responseBody; 
    } 

    private static String convertStreamToString(InputStream is) { 
     BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
     StringBuilder sb = new StringBuilder(); 
     String line = null; 
     try { 
      while ((line = reader.readLine()) != null) { 
       sb.append(line).append("\n"); 
      } 
     } catch (IOException e) { 
     } finally { 
      try { 
       is.close(); 
      } catch (IOException e) { 
      } 
     } 

     return sb.toString(); 
    } 
+0

嗨thanku您的回应!但我们期待UserInfo ... ,但现在我正在验证使用Googlecredential类... –

+0

@BhargavMethuku所以你现在可以得到用户信息。 – Jhanvi

+0

是的,我需要获取用户信息 –

相关问题