2013-10-20 2 views
7

서버와의 통신을 기반으로하는 Android 애플리케이션을 개발 중이며 Google (g +) 인증 메커니즘을 사용하고 싶습니다.Google에 대한 액세스 토큰 서버 측 유효성 검사

  1. 을 내 안드로이드 응용 프로그램에서 사용자가 로그인을 Google에 자신의 이메일과 비밀번호를 사용하여 :

    는 기본적으로, 나는이 같은 일을한다고 생각합니다.

  2. 사용자는 관련 Google 애플리케이션에 대한 데이터에 액세스 할 수 있습니다.
  3. 성공적으로 로그인하면 안드로이드 앱에 액세스 토큰이 전송됩니다.
  4. 내 서버와 더 이상 통신하려면 내 안드로이드 응용 프로그램에받은 Google 액세스 토큰 (예 : 검색어)을 사용해야합니다.
  5. 내 서버가 액세스 토큰을 사용하여 Android 앱에서 일부 쿼리를 받으면이 토큰이 (그리고 누가) 유효한지를 Google에 문의해야하며, 그렇다면 서버는 사용자가 Google 인증을받은 것으로 간주해야합니다.

제 질문은 : 주어진 액세스 토큰이 유효하면 서버가 Google에 어떻게 요청해야합니까? 토큰이 내 안드로이드 애플 리케이션에 유효한지 어떻게 든 확인해야한다고 생각합니다.

내가 찾은 Google API에 대한 많은 Google 검색어를 시도했지만 예상 한대로 작동하지 않았습니다. 몇 가지 예를 들어 주시겠습니까?

+0

내가 질문에 대해 확실하지 않다. 앱이 Google 서버와 직접 통신하고 있기 때문에 개인 서버는 어디에 위치합니까? 안드로이드 앱 자체에서 토큰 유효성을 확인할 수 있습니다. 당신은 정교 할 수 있습니까? – drulabs

+0

이미 클라이언트 앱 (안드로이드)에서 g +에서 액세스 토큰을 얻고 있습니다. 서버에 액세스 토큰을 보내고 있습니다. 해당 서버에서 Google로부터 해고당한 액세스 토큰의 유효성을 다시 확인하고 싶습니다. 사용자 정보 ... 해당 액세스 토큰을 사용 중입니다 .... 응답 해 주셔서 감사합니다 –

+0

아무 작업이나 해보십시오. 토큰이 유효하면 검색이나 업로드 또는 기타와 마찬가지로 응답을 받거나 "승인되지 않은"응답을 받게됩니다. 일반적으로 토큰은 1 시간마다 또는 사용자가 명시 적으로 Google 비밀번호를 변경할 때 만료됩니다. 인증을 제대로 수행했다면 액세스 토큰으로 새로 고침 토큰을 받아야합니다. 이 새로 고침 토큰을 사용하여 새 액세스 토큰을 가져옵니다. – drulabs

답변

0

tokeninfo 엔드 포인트를 사용하여 토큰 (액세스 또는 ID 토큰)을 점검 할 수 있습니다. API 만 가지고 놀고 싶다면 TokenInfo API from the API Explorer을 사용할 수 있습니다.

OAuth v2 용 Google 제공 라이브러리를 사용하여 API 호출을 수행 할 수 있습니다.

OAuth v2 Playground documentation에 설명 된대로 URL을 구성하고 GET 쿼리를 수행 할 수도 있습니다.

1

access_token이 유효한지 여부를 확인할 수 있습니다.

요청시 access_token을 사용하여 GET 요청을 API 끝점 인 https://www.googleapis.com/oauth2/v1/tokeninfo에 보내야합니다.

이처럼 시도 할 수 있습니다 : 위의 코드에서 사용

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

안녕하세요. 감사합니다. 하지만 우리는 UserInfo를 기대하고 있습니다 ... 하지만 지금은 Googlecredential 클래스를 사용하여 유효성을 검사하고 있습니다 ... –

+0

@BhargavMethuku 그래서 지금 userinfo를 얻을 수 있습니다. 맞습니까 ?? – Jhanvi

+0

예 사용자 정보를 얻을 필요가 있습니다 –

관련 문제