我正在按照这些说明(https://developers.google.com/identity/sign-in/android/backend-auth)获取要发送到我的后端的 ID 令牌,但是当我设置时String scopes = "audience:server:client_id:" + Service.SERVER_CLIENT_ID;
(是的,SERVER_CLIENT_ID
这不是 Android客户 ID)我未能获得令牌并引发此错误。
E/Login: com.google.android.gms.auth.GoogleAuthException: Unknown
但是,当我改用以下范围时
String scopes = "oauth2:profile email";
我成功获得了“a”令牌,但它没有我预期的那么长,我担心它可能是错误的。
我的问题是...
1)为什么scopes = "audience:server:client_id:" + SERVER_CLIENT_ID;
指南中使用的不起作用?
2) 我使用String scopes = "oauth2:profile email";
安全的令牌在后端验证用户是否获得了令牌?
代码如下。
@Override
protected String doInBackground(Void... params) {
String accountName = Plus.AccountApi.getAccountName(googleApiClient);
Account account = new Account(accountName, GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE);
//String scopes = "oauth2:profile email";
String scopes = "audience:server:client_id:" + Service.SERVER_CLIENT_ID; // Not the app's client ID.
Log.d(TAG, "Account Name: " + accountName);
Log.d(TAG, "Scopes: " + scopes);
try {
userIdToken = GoogleAuthUtil.getToken(getApplicationContext(), account, scopes);
return userIdToken;
} catch (IOException e) {
Log.e(TAG, "IOError retrieving ID token.", e);
return null;
} catch (UserRecoverableAuthException e) {
startActivityForResult(e.getIntent(), RC_SIGN_IN);
return null;
} catch (GoogleAuthException e) {
Log.e(TAG, "GoogleAuthError retrieving ID token.", e);
return null;
}
}