2012-11-21 4 views
3

클라이언트 - 서버 애플리케이션을 개발 중이며 사용자가 Google에 로그인 할 수있는 단일 사인온을 제공하려고합니다. 저는 AccountManager를 사용하여 전화로 액세스 토큰을 얻은 다음 토큰을 확인하고 사용자를 로그인하기 위해이 토큰을 서버로 보냄으로써이를 수행 할 계획입니다."권한 요청"대화 상자를 표시하지 않고 AccountManager에서 인증 토큰을 가져올 수 있습니까?

AccountManager에서 getAuthToken 메서드를 호출하면 사용자가 허용해야하는 대화 상자가 표시되지만 Android의 Chrome에서는이 대화 상자가 표시되지 않은 상태에서 로그인하여 Google 계정과 브라우저 데이터를 동기화 할 수 있습니다. 그래서 Chrome은 사용자에게 대화 상자가 표시되지 않고 액세스 토큰을 확보 할 수있는 것처럼 보입니다. 앱에서 동일한 작업을 수행 할 수 있다면 매우 좋을 것입니다.

Android 용 소스 코드와 implementation of getAuthToken을 보면 응용 프로그램이 사전 설치된 응용 프로그램이거나 응용 프로그램 UID가 (Google 계정의) 인증 자의 UID와 동일한 경우 자동으로 액세스 권한이 부여 된 것으로 보입니다.

내 앱과 Chrome은 사전 설치되어 있지 않으므로 두 경우 모두 체크가 거짓입니다. 내 앱은 물론 UID를 Google 계정 인증 프로그램과 공유 할 수 없으며 Google에서 두 버전을 모두 생성 한 이후로 Chrome이 UID를 인증 프로그램과 공유 할 가능성이 있다고 가정합니다. 그렇다면 Chrome에서 대화 상자가 표시되지 않는 이유를 설명합니다.

내가 누락되었을 수있는 액세스 토큰을 요청할 때이 대화 상자가 사용자에게 표시되지 않게하는 다른 방법이 있습니까?

답변

4

아니, 내가보고 좀 더 신중하게 안드로이드 소스 코드를 읽은 후

불가능 진정한뿐만 아니라 UID가 동일한 경우, 또한 응용 프로그램이 서명 된 경우 반환 hasAuthenticatorUid() 방법 authenticator와 같은 서명이로 서명됩니다.

Chrome의 경우인지 확인하기 위해 크롬 apk 파일에 android-apktool을 사용하여 Chrome 용 manifest.xml을 살펴볼 수 있습니다. Chrome에서 인증 자와 공유 된 UID를 사용하지 않는 것을 볼 수 있습니다.

그 후에 나는 내 자신의 디버그 키로 Chrome apk에 다시 서명하고 그 apk를 내 휴대 전화에 설치했습니다. 이 작업을 수행하고 Chrome에 로그인을 시도 할 때 몇 가지 '권한 요청'대화 상자가 나타납니다.

크롬과 인증자가 동일한 키로 서명되어 Chrome이 다른 타사 앱에서 자동으로 사용 권한을 얻지 못하는 것임이 분명합니다.

타사 앱이 권한을 요청하는 대화 상자를 표시하지 않고 타사 앱이 Google 계정의 토큰을 보유 할 수 없으며 실제로 모든 것이 실제로 좋은 것입니다. 내가 알기로는 내 전화에서 임의의 앱으로 내 계정에 액세스 토큰을 가져 오는 것을 원하지 않습니다.