我正在尝试开发一个使用一些基本的Google+ Apis的应用程序。该应用程序从Google请求令牌,然后在我的服务器和我的服务器上传,以检查其与Google的验证。我不明白(我有点困惑)是Web应用程序的客户端ID与Google Developers Console中Android应用程序的客户端ID之间的区别。我已经在Android应用上尝试了这两种方法并且都工作(成功获得了令牌)。显然,使用Web客户端ID时,我使用GoogleAuthUtil.getToken()
传递的SCOPE与使用Android客户端ID的SCOPE不同。那么,它们之间的区别是什么?我认为我应该使用Android客户端ID,但我想知道真正的差异。
在客户端,我使用:
final String token = GoogleAuthUtil.getToken(mContext, userEmail, G_PLUS_SCOPE);
G_PLUS_SCOPE = oauth2:https://www.googleapis.com/auth/plus.me
在服务器端,我使用此代码向Google查询:
GoogleIdToken token = GoogleIdToken.parse(mJFactory, getRequest().getAuthToken());
if (mVerifier.verify(token)) {
GoogleIdToken.Payload tempPayload = token.getPayload();
if (!tempPayload.getAudience().equals(mAudience)) {
problem = "Audience mismatch";
errorMessage = new ErrorMessage(ErrorCodes.AUDIENCE_MISMATCH,problem,null);
mResponse = new ErrorResponse( errorMessage);
}
else if (!mClientIDs.contains(tempPayload.getAuthorizedParty())) {
problem = "Client ID mismatch";
errorMessage = new ErrorMessage(ErrorCodes.CLIENT_ID_MISMATCH,problem,null);
mResponse = new ErrorResponse(errorMessage);
}
我也不明白什么是mAudience的确切价值。我是否需要将客户端ID作为mAudience?并且,mClientID是包含所有密钥的数组(包括Android客户端ID密钥)吗?
感谢您的帮助
编辑:关注http://android-developers.blogspot.it/2013/01/verifying-back-end-calls-from-android.html我已经读到Audience是Web应用程序的客户端ID,而mIds是已安装应用程序的所有ID(对我来说是1,因为我只有Android) 。但我不确定这是否是适合每种情况的正确方法。
答案 0 :(得分:0)
我没有回答你的问题,但我发现这个博客可以帮到你:
http://www.androidhive.info/2014/02/android-login-with-google-plus-account-1/
我希望这会对你有所帮助。
答案 1 :(得分:0)
从技术上讲,受众是ID令牌用于对用户进行身份验证的客户端ID,其中被授权方是发出ID令牌的客户端ID:
http://openid.net/specs/openid-connect-core-1_0.html#IDToken
您应该同时验证两者。从Android应用程序请求ID令牌时,您应该使用服务器的客户端ID来发出请求。然后,您的服务器应该在从您的Android客户端收到令牌时验证它是否是该令牌的受众。