Android 如何保护被称为任务的Google云端点方法?
我有一个android应用程序与我的谷歌云端点后端对话 在其中一个端点方法中,我将一个“任务”推送到队列中 该任务由另一个端点方法处理,例如“/taskenpoint/doSomeWork” 我已通过将“/\u ah/spi/taskendpoint/*”的访问权限限制为“管理员用户”,从而保护了此端点方法(处理任务功能)— 我已经从浏览器中检查过了,一切正常,只允许管理员用户访问url 但是,现在的另一个问题是,相同的任务端点和方法在浏览器中的Google endpoint API explorer中可见,任何人都可以在此处输入值并使用任务方法。如何使此方法在API资源管理器中不可见,因为此方法仅为任务所需 另外,虽然我的应用程序使用OAuth身份验证,但它用于对android客户端进行身份验证,在本例中,它只是一个端点方法,通过任务调用另一个端点方法Android 如何保护被称为任务的Google云端点方法?,android,google-app-engine,oauth-2.0,google-cloud-endpoints,Android,Google App Engine,Oauth 2.0,Google Cloud Endpoints,我有一个android应用程序与我的谷歌云端点后端对话 在其中一个端点方法中,我将一个“任务”推送到队列中 该任务由另一个端点方法处理,例如“/taskenpoint/doSomeWork” 我已通过将“/\u ah/spi/taskendpoint/*”的访问权限限制为“管理员用户”,从而保护了此端点方法(处理任务功能)— 我已经从浏览器中检查过了,一切正常,只允许管理员用户访问url 但是,现在的另一个问题是,相同的任务端点和方法在浏览器中的Google endpoint API explo
我找不到很多关于这方面的文档,因此我非常感谢您的帮助这就是我最终解决阻止任何外部请求访问我的任务url的总体问题的方法- 首先,使用(已在原始帖子中提到)阻止“\u ah/spi”对任务url的访问 其次,现在要阻止对通过api资源管理器传入的任务url的“\u ah/api”(这是主要问题)请求的访问,我所做的是- 将HttpServletRquest添加到endpoint方法,并检查任何与任务相关的头,例如“X-AppEngine-QueueName” 根据文档,GAE确保只有来自任务的请求包含这些头,其他请求不会包含这些头 因此,当您从API资源管理器调用该方法时,这些头为null,您可以对接收到的非任务请求引发异常。下面给出一个简短的代码示例-
@ApiMethod(name = "sendMessage", httpMethod = HttpMethod.POST)
public void sendMessage(HttpServletRequest req, @Named("messageText") String MessageText)
{
String str = req.getHeader("X-AppEngine-QueueName");
if(str==null)
{
// throw invalid request exception here
}
…1)将用户参数添加到auth的方法中
@ApiMethod(name = "test", path = "myApi/test",
scopes = {Constants.EMAIL_SCOPE},
clientIds = {Constants.WEB_CLIENT_ID,
Constants.ANDROID_CLIENT_ID,
com.google.api.server.spi.Constant.API_EXPLORER_CLIENT_ID},
audiences = {Constants.ANDROID_AUDIENCE})
public User test(User user) throws UnauthorizedException {
if (user == null) throw new UnauthorizedException("User not valid!");
return user;
}
2) 生成令牌
3) 使用以前创建的令牌
GoogleCredential credential=新建GoogleCredential().setAccessToken(accessToken)
一种解决方法是,我可以知道API Explorer是否调用了endpoint方法,然后在代码中拒绝该请求。有没有办法知道API explorer是否调用了endpoint方法?是的,这就是解决方案。在endpoint类中,顶部的
@Api
部分应该有一行类似于clientId={com.google.Api.server.spi.Constant.Api\u EXPLORER\u CLIENT\u ID,您的\u android\u CLIENT\u ID}
。删除api explorer项。这些字段不在任务的oauth结构中使用,因为对任务方法的调用是从app engine内部进行的,而不是从android客户端进行的,因此未使用auth。如果使用auth,则有必要对任务请求进行身份验证,没有干净的方法可以做到这一点。下面找到了一个更简单的方法来解决这个问题。。