带有Google+ API的Android应用:客户ID或Android ID?

时间:2014-03-18 15:34:11

标签: android google-plus

我正在尝试开发一个使用一些基本的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) 。但我不确定这是否是适合每种情况的正确方法。

2 个答案:

答案 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客户端收到令牌时验证它是否是该令牌的受众。