Google 드라이브 Android API를 사용하여 사용자가 Android 기기의 Google 드라이브에서 내 서버로 파일을 업로드 할 수있게했습니다. 크로스 클라이언트 인증을 사용하여 서버가 사용자의 Google 드라이브에 직접 액세스 할 수 있도록이 설정을 변경하고자합니다. 즉, 을 GoogleAuthUtil.getToken
으로 생성해야합니다. 그리고 이것은 모든 것이 철저히 벗어났다는 것입니다. 이 토큰을 생성하려면 Account
개체가 필요합니다.Google 드라이브 Android API 및 교차 클라이언트 인증
mGoogleApiClient = new GoogleApiClient.Builder(getContext())
.addApi(Drive.API)
.addScope(Drive.SCOPE_FILE)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
이 잘 작동, 모든 이제 다음은 사용자가 연결 계정을 선택할 수있는 계정 선택기 보여줍니다
현재,이 같은 GoogleApiClient
를 설정하고있다. 모두 프레임 워크에 의해 관리됩니다. 그러나 사용자가 연결하기로 선택한 Account
에 액세스 할 수있는 방법은 없습니다.
는 대신, 사용, 그것을 자신을 관리 할 수 있습니다
Intent intent = AccountPicker.newChooseAccountIntent(null, null, new String[]{"com.google"},
false, null, null, null, null);
startActivityForResult(intent, RC_ACCOUNT_PICKER);
그리고 onActivityResult
에 내가 사용 선택한 계정을 얻을 수 있습니다 : 내가 Account
목적이 있기 때문에, 지금
Account account = new Account(intent.getExtras().getString(AccountManager.KEY_ACCOUNT_NAME),
intent.getExtras().getString(AccountManager.KEY_ACCOUNT_TYPE));
과, 나는 그것을 명시 적으로 연결할 수 있습니다 :
mGoogleApiClient = new GoogleApiClient.Builder(getContext())
.addApi(Drive.API)
.addScope(Drive.SCOPE_FILE)
.setAccountName(mAccount.name) // Account name!
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
이것은 내 유일한 optio입니까? n, 내 첫 번째 솔루션을 사용하여 사용자가 Account
을 선택할 수있는 방법이 있습니까?
- 나중에
생성 할 때 내ID Token
사용 : 난 아직도 비록, 내가 사용자로부터 또 다른 권한을 부여 받아야합니다
UserRecoverableAuthException
납니다
String scope = String.format("oauth2:server:client_id:%s:api_scope:%s",
"12345.apps.googleusercontent.com",
"https://www.googleapis.com/auth/drive.file");
String token = GoogleAuthUtil.getToken(getContext(), mAccount, scope);
내가 연결할 때와 같은 계정과 동일한 인증 범위를 사용하고 있습니다. 모든 조치가 완료되면 동일한 코드를 다시 실행하고 마침내 ID Token
을 얻을 수 있습니다.
-
뭔가 내가 근본적으로 오해가 한 경우, 또는이는이 일을 해야하는 방법을 정말?
내가 질문을 할 수 있습니까? 블로그 사이트에서'일반적으로 안드로이드 클라이언트에서 REST API 호출을하지 않는 한 GoogleAuthUtil.getToken을 사용하면 안됩니다. 제대로 이해한다면'GoogleAuthUtil.getToken'은 요청이 계속해서 안전하게 사용될 수 있음을 의미합니다 안드로이드 앱에서 직접 호출되는 REST API (서버없이)? – BNK
로컬로 ID 토큰을 사용하려면 [id 토큰 흐름] (https://developers.google.com/identity/sign-in/android/migration-guide # migrate_to_the_id_token_flow)를 사용하고 'requestIdToken()'을 사용하여 단일 사인온의 이점을 얻으십시오. – ianhanniballake
그러나이 경우 'GoogleAuthUtil.getToken' 보안이 유지됩니까? 또한 '사용자의 ID, 이메일 주소, 이름 또는 프로필 사진 URL'을 가져 오는 데만 사용되는 id 토큰은 Google 드라이브, YouTube 또는 연락처와 같은 다른 Google API에 액세스하는 데 사용되지 않습니다. – BNK