脱机测试经过身份验证的Cloud Endpoints方法

时间:2015-07-10 07:33:09

标签: javascript java google-app-engine google-cloud-endpoints

明天我要进行长途飞行,我希望能够在离线时继续测试我的云端点REST API。问题是User对象是我的大多数方法的组成部分,我需要一个互联网连接来创建有效的OAuth令牌,以便从客户端(JavaScript)调用它们。

在开发服务器上,无论您登录的是什么帐户,用户始终都是相同的(使用电子邮件example@example.com)。但如果你喂它伪造的令牌,就会抛出一个OAuthRequestException

有没有办法可以为dev服务器生成有效的测试令牌,或者在不提供令牌的情况下访问User对象的方法?

以下是我想在离线时测试的方法示例:

@ApiMethod(name = "hylyts.get")
public Hylyt getHylyt(@Named("url") String url, @Named("id") long id, User user)
        throws OAuthRequestException, UnauthorizedException {
    return ofy().load().type(Hylyt.class).parent(util.getArticleKey(url, user)).id(id).now();
}

1 个答案:

答案 0 :(得分:2)

在云端点中注入自定义Authenticator类有一些记录的方法。这允许您更改检测到用户的方式。

以下是它的工作原理:

@Api(name = "myapi", version = "v1", authenticators  = {MyDummyAuthenticator.class})
public class MyAPI {
  @ApiMethod(name = "hylyts.get")
  public Hylyt getHylyt(@Named("url") String url, @Named("id") long id, User user)
        throws OAuthRequestException, UnauthorizedException {
    return ofy().load().type(Hylyt.class).parent(util.getArticleKey(url, user)).id(id).now();
  }
}

以下是Authenticator实施的结果:

public class MyDummyAuthenticator implements Authenticator {
    @Override
    public User authenticate(HttpServletRequest httpServletRequest) {
        return new User("mytestuser@domain.com");
    }
}

你当然可以让它更复杂。由于您可以访问HttpServletRequest,因此您可以通过HTTP标头或类似内容获取用户的电子邮件。

请注意,使用Authenticator您可以访问本地服务器中的会话,但不能访问生产。在制作中,httpServletRequest.getSession()将返回null。这仍然是从数据存储区which I explain here获取会话的技巧。

然后是如何保持正常身份验证解决方案和DummyAuthenticator实现的问题。我认为你可以链接身份验证器,但我不确定它是如何工作的。在最糟糕的情况下,您可以在航班期间交换Authenticator实施。