我正在编写一个需要访问Google的Calendar API的Android应用程序。我想避免使用Google API客户端库来支持简单的Retrofit REST实现。但是,我似乎无法获得正确的授权凭据才能完成Calendar API REST调用。在我的应用中,我使用以下选项成功登录:
GoogleSignInOptions
.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestScopes(Scope("https://www.googleapis.com/auth/calendar"))
.requestEmail()
.requestIdToken("WEB CLIENT ID HERE")
.build()
最后我得到一个GoogleSignInAccount
,使我可以访问idToken
属性。我已经尝试在日历API请求的授权标头中将此idToken
用作OAuth 2.0 Bearer令牌,但每次都被401
拒绝。关于Google的OAuth流程,有很多文档似乎相互矛盾或已被更新,但这使事情非常混乱。为了能够从我的Android应用程序使用REST API,我需要做什么?
答案 0 :(得分:0)
谢谢您的回答,我设法找到了如何使用GoogleSignInAccount来验证API请求。
使用google_sign_in插件成功登录帐户后 (请参见example以获得帮助),您可以直接从GoogleSignInAccount获取api请求的身份验证所需的身份验证标头。 参见:
GoogleSignInAccount _currentUser;
Future<Map<String, dynamic>> _getLabels() await {
http.Response _response = await http.get(
'https://www.googleapis.com/gmail/v1/users/'+_currentUser.id+'/labels',
headers: await currentUser.authHeaders,
);
return jsonDecode(_response);
}
答案 1 :(得分:0)
authHeaders仅在Dart中实现,可以在https://pub.dev/documentation/google_sign_in/latest/google_sign_in/GoogleSignInAccount-class.html处检查源。
所以authHeaders如下:
"Authorization": "Bearer $accessToken",
"X-Goog-AuthUser": "0",
现在如何获取accessToken? Dart正在呼叫GoogleSignInPlatform.instance.getTokens(email, shouldRecoverAuth: true)
;该方法的含义可以在这里找到:https://github.com/flutter/plugins/blob/master/packages/google_sign_in/google_sign_in_platform_interface/lib/src/method_channel_google_sign_in.dart#L50
Aaaaand我放弃了这个Google废话: