Android アプリで Google+ サインインを使用しており、認証トークンを Web サーバーに送信したいと考えています。リンク [ https://developers.google.com/identity/sign-in/android/backend-auth] [1] 次のコードを使用して idToken を生成します。
private class GetIdTokenTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
String accountName = Plus.AccountApi.getAccountName(mGoogleApiClient);
Account account = new Account(accountName, GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE);
String scopes = "audience:server:client_id:" + Constants.SERVER_CLIENT_ID; // Not the app's client ID.
String idToken = "";
try {
idToken = GoogleAuthUtil.getToken(getApplicationContext(), account, scopes);
} catch (IOException e) {
Log.e(TAG, "Error retrieving ID token.", e);
} catch (GoogleAuthException e) {
Log.e(TAG, "Error retrieving ID token.", e);
}
return idToken;
}
@Override
protected void onPostExecute(String result) {
authToken=result;
Log.i(TAG, "ID token: " + result);
}
}
そして、私は次のようなIDトークンを取得します:
eyJhbGciOiJSUzI1NiIsImtpZCI6IxxxxxNThkODVjODU3hiMjI3MjBhM2E1NWxxxxzM0NDcifQ.eyJpc3MiOiJhY2NvdW50cy5nb29nbGUuY29tIiwic3ViIjoiMTEyMzA2OTkwMjA1NDYyMjkzMDExIiwiYXpwIjoiNDU5NTM4MTI1OTIzLXUzNTEzNGZ0aTZyOWJnNGM4MDFjZW82MzVhNWVoNTZzLmFwcHMuZ29vZ2xldXNlcmNvbnRlbnQuY29tIiwiZW1haWwiOiJsZWppbmtyQGdtYWlsLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJhdWQiOiI0NTk1MzgxMjU5MjMtNDZlN3Q3YzNhbmQ3M2VqcThyZWZvZTFzYTIzdm9wOHEuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJpYXQiOjE0MzI2MzI5ODUsImV4cCI6MTQzMjYzNjU4NX0.vCT8lanz5Pa2_m_AQ4tZHaME_y_ffa5zqA5_O3u7ZhuOQTmK8xXUh7M-Q_R67KosGPX-ikr_7Tz57OiXNIyKtNBOFKssssxxE0v7wEJvFhVgLSpbuD
これは idToken の実際の形式ですか?
しかし、私のバックエンドサーバーの認証トークンには、このような形式が必要です(バックエンドを行っている他の人もいます)
ya29.QwGqNA9LsssggddjKZxxRD74HT_viU0wHxoDieWbsIJG3R0xvW3bDij4jzxxxxxP6wPSi7w1bysA
バックエンドのコーダーは、urlshortener や userinfo.email などを使用してその種のトークンを取得することを提案しています。このタイプのトークンを取得するにはどうすればよいですか? 次のコードで、google plus とドライブ api に接続するために GoogleApiClient を使用しています。
if (mGoogleApiClient == null) {
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(Drive.API)
.addScope(Drive.SCOPE_FILE)
.addApi(Plus.API)
.addScope(new Scope("profile"))
.addScope(Drive.SCOPE_APPFOLDER) // required for App Folder sample
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
}
findViewById(R.id.sign_in_button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mGoogleApiClient.connect();
}
});
上記で説明した短縮形式で認証トークンを取得する方法は?