1

Google은 Android보기 및 웹 사이트로 앱을 작성하고 있습니다. Google의 앱은 Facebook, Google 또는 Twitter (FGT라고 함)와 일부 데이터를 연결 한 다음 해당 데이터가 인증되면 true을 반환하기 위해 연결된 서비스를 누르십시오. 제어 흐름이AccountManager..getAuthToken 후, 그 토큰을 공급자에게 보내서 인증을받는 방법?

  1. 안드로이드
  2. 사용자는 FG 또는 T 계정을 선택하는 몇 가지 데이터를 생성 ...입니다
  3. getAuthToken
  4. 우리의 웹 사이트, HTTPS POST를 통해 + 토큰 데이터를 업로드
  5. 하지 않는 경우에 우리의 웹 사이트는 (은 중요한 장고,하지 않는 것이)가 그 토큰을 좋아하는 경우
  6. FGT는 true를 반환 FGT하기 위해 인증 토큰을 전송하고 false

목표는 공격자가 데이터를 작성하여 curl으로 사이트에 던지는 것을 방지하는 것입니다. F, G 또는 T로 데이터를 업로드 할 필요가 없습니다. Google 웹 서비스가 F, G 또는 T로 인증되는 하이브리드 앱으로 이동할 필요가 없습니다. 그런 다음 F, ​​G 또는 T의 API를 사용하여 사용자 이름으로 게시, 전자 메일 또는 트윗합니다.

분명히 어딘가에 대한 간단한 대답이 있습니다. F, G 또는 T 각각에 하나씩, 인증 토큰을 삽입 할 수있는 세 개의 URI 만 있으면됩니다. 그렇기 때문에 페이스 북, 구글, 트위터별로 SDK를 다운로드하고 설치하지 않고 각 경우에 대해 엄청난 양의 서비스 별 코드를 작성하는 것을 선호합니다. 클라이언트가 Tumblr이나 MSN을 요청할 때 코드가 복잡해지면 나를 망쳐 놔야합니다.

(A 관련 질문 : getAuthToken()의 두 번째 매개 변수는 무엇 "아" "메일"???) 그래서

, 열심히 일을하는 방법을 보여주는 책, 소스 코드 및 SO 게시물을 읽고 계속하면서 어려운 방법, 누군가 쉬운 방법을 쉬운 방법으로하는 방법을 알려줄 수 있습니까?

답변

1

"validating Android's authToken on third party server"스레드는 "토큰을 테스트하기 위해 어떤 간단한 URI를 치겠습니까?"라는 하위 질문에 대답했습니다.

마법의 URI는 구글이다 : https://accounts.google.com/o/oauth2/tokeninfo?access_token=%token_here%

다음 질문은 getAuthToken에서 액세스 토큰을 쿵하는 방법입니다. 범위가 사용자를 보여 최소 할 수 정말 여기 살고해야합니다

String SCOPE = "oauth2:https://www.googleapis.com/auth/userinfo.profile"; 
am.getAuthToken(a, SCOPE, false, this, null); 

this 클래스는 AccountManagerCallback<Bundle>를 구현하는 방법 run(AccountManagerFuture<Bundle> result)을 제공합니다."Android AccountManagerFuture getResult gives IOEXcelption when trying to get authorization token"과 같은 문서에서는 startActivity()으로 전화하여 사용자가이 활동을 승인하도록 요청하거나 이미 AccountManager에 저장된 토큰을 사용할 수 있습니다. (그리고 목표 코드를 단지 run()이라고 부르면, 특히 내가하는 것처럼 말하지 않는다.)

결과 토큰은 52 바이트이며, 'ya29.'로 시작하여 아마도 _ id_token 인 331 개의 문자가 아닌 _ 아마도 _ _ _ _ _ _ _입니다.

결과 토큰은 특정 채널 ("채널"은 클라이언트, 서버 및 범위의 고유 한 집합)에 바인딩되지 않습니다. 그래서, 간단한 컬에서, 나는 그것으로 그 /tokeninfo URI를 공격하고,이 (하찮은) JSONic 지혜를 얻을 수 있습니다 : 다른 모든 사이

{ 
    "issued_to" : "442575845966-mde4be7eingpb5pntfs839jipsetro6s.apps.googleusercontent.com", 
    "audience" : "424242424242-mde4ab7defghi5jklmn839opqrstuv6s.apps.googleusercontent.com", 
    "user_id" : "424242424242424242424", 
    "scope" : "https://www.googleapis.com/auth/userinfo.profile", 
    "expires_in" : 2272 
} 

그래서이 답변이 형성된 것, 나를 위해, 누락 된 링크를 내가 읽으려고했던 문서. 이제는 페이스 북을 위해 모든 것을 다시 할 필요가 있습니다 & 트위터 ...

0

간단한 URL이 있습니다. 각 authtoken은 범위에 대해 부여됩니다. 각 범위는 authtoken이 특정 작업을 수행 할 수있게합니다. 범위에서 허용하는 것을하려고하면 authtoken의 유효성을 기반으로 실패하거나 성공할 것입니다.

요청할 수있는 가장 간단한 범위는 아마도 '이메일'입니다.

Oauth2 놀이터 (https://developers.google.com/oauthplayground/)로 가면 스코프와 통화를 시험해 볼 수 있습니다. 그러면 앱에서 복제해야하는 URL을 볼 수 있습니다.

+0

oauthplayground 범위는 낮은 https://www.googleapis.com/auth/userinfo.profile로 밝혀졌습니다. Tx. 나는 현재 그것을 사용하여 access_token을 얻는 방법을 쓸 것이다. (이전에 채널 관련 ID_token을 얻었습니다.) – Phlip