向 Google Cloud Endpoint 验证我的"app",而不是"user"



我要做的是向Google Cloud Endpoint验证我的Android应用程序。基本上,端点应该只允许我的Android应用程序访问方法,而不允许访问其他方法。

我已经做了这些事情-

  1. 在Google云控制台的Eclipse中使用我的SHA1值创建一个客户端id。

  2. 在Google Cloud控制台中为我的端点项目创建一个web客户端id。

  3. 在每个端点上提到的"@Api"中添加这两个客户端id。

  4. 在端点方法中添加一个额外的"user"参数。

  5. 重新生成后端并将其部署到云中。

但是当我运行这个时,"user"总是以"null"的形式出现。我绞尽脑汁想找到一个合适的工作方法来做这一切。

我搜索了很多论坛,但没有合适的答案。

这是另一个类似的帖子限制访问谷歌云端点到安卓应用

这是我使用的参考资料-https://developers.google.com/appengine/docs/java/endpoints/auth

这里以前有人这样做过吗?出于明显的安全原因,我的主要目标是不允许未经验证的应用程序和外部世界访问端点。我不想使用基于最终用户的身份验证,因为我想让我的应用程序非常简单。

听起来它正在按预期工作。您可以控制哪些客户端应用程序可以通过客户端ID调用您的端点方法,正如您已经完成的那样。User参数为null正是因为您没有进行最终用户身份验证。User参数表示实际的真实用户(Google帐户)。因此,如果您不需要经过最终用户身份验证的方法,您可以简单地不定义user参数,或者忽略null值。你说你的问题是User参数设置为null。在这种情况下,你期望它是什么?

您需要在客户端上调用authenticate,然后您使用的库可能会"注入"用户信息。

以下是对我有效的方法:

假设你有下面的钥匙:

static final String WEB_CLIENT_ID = "somekeyfor webclientid.apps.googleusercontent.com";

static最终字符串ANDROID_CLIENT_ID="somekeyforandroidclientid.apps.googleusercontent.com";静态最终字符串ANDROID_AUDERINCE=WEB_CLIENT_ID;

你的Api站应该是这样的:

@Api(
        name = "yourapiname",
        clientIds = {CloudEndpoint.WEB_CLIENT_ID,CloudEndpoint.ANDROID_CLIENT_ID},
        audiences = {CloudEndpoint.ANDROID_AUDIENCE},
        version = "v1",
        namespace = @ApiNamespace(
                ownerDomain = "myapp.app.com",
                ownerName = "myapp.app.com",
                packagePath = ""
        )
)

在下面的注释中,请注意您的受众是变量-->ANDROID_AUDERINCE,它等于WEB_CLIENT_ID。

现在在你的应用程序端,当你创建googleAccountCredential对象时,你应该像这样传递Web客户端Id:

mAccountCredentials = GoogleAccountCredential.usingAudience(getApplicationContext(),"server:client_id:" + "yourwebclientID");

请注意,即使这样做正确,如果您在mAccountCredentials.setSelectedAccountName("accontname")中传递的帐户名在设备中不存在,则端点中的用户对象可能仍显示为Null。因此,请转到-->(设置/帐户)

,确保您传递的帐户名确实存在于Android设备中

最新更新