validation我的“应用程序”Google云端点不是“用户”

我正在尝试的是将我的Android应用程序authentication到Google Cloud Endpoint。 基本上,端点应该只允许我的Android应用程序访问的方法,没有别的。

我做了这些事情 –

  1. 在Google端控制台的Eclipse中使用我的SHA1值创build客户端ID。

  2. 在Google云端控制台中为我的端点项目创build一个Web客户端ID。

  3. 将这两个客户端ID添加到每个端点上提到的“@Api”中。

  4. 在端点方法中添加一个额外的“用户”参数。

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

但是,当我运行这个“用户”总是作为“空”来。 我正在努力寻找一个适当的工作方法来完成这一切。

我search了很多论坛,但没有任何适当的答案。

这里是另一个类似的post限制访问谷歌云terminal到Android应用程序

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

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

Solutions Collecting From Web of "validation我的“应用程序”Google云端点不是“用户”"

这听起来像是按预期工作。 您可以控制哪些客户端应用程序可以通过客户端ID来调用您的端点方法。 User参数正好是空的,因为你没有进行最终用户authentication。 用户参数代表实际的真实用户(Google帐户)。 所以如果你不需要最终用户authentication的方法,你可以简单地不定义User参数,否则忽略空值。 你说你的问题是用户参数设置为空。 你在这种情况下期待什么?

您需要在客户端调用身份validation,然后可能您正在使用的库将“注入”用户信息。

以下是对我有用的东西:

假设你有下面的键:

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

static final String ANDROID_CLIENT_ID =“somekeyfor androidclientid.apps.googleusercontent.com”; static final String ANDROID_AUDIENCE = 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 = "" ) ) 

在下面的注释中,注意您的受众是如何variables – > ANDROID_AUDIENCE,它等于WEB_CLIENT_ID。

现在,在您的应用程序方面,当您创buildgoogleAccountCredential对象时,您应该像这样传递Web客户端Id:

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

请注意,即使正确完成,如果在设备中不存在您在mAccountCredentials.setSelectedAccountName(“accontname”)中传递的帐户名称,端点中的用户对象仍可能为空。 因此,请确保您通过的帐户名称确实存在于Android设备中,方法是 – >(设置/帐户)