为App Engine后端生成API密钥

时间:2015-07-15 16:12:08

标签: android ios google-app-engine google-cloud-endpoints

我有一个Android / iOS SDK,通过App Engine和Cloud Endpoints与我的后端通信。我想限制对已创建帐户的开发人员的访问权限,并生成“API密钥”(引号中,因为我不确定需要采用何种形式)与我的后端进行交互。我还想跟踪请求来自哪个开发人员/应用程序,因此我想为每个开发人员提供一个唯一的密钥。

Cloud Endpoints使用SSL,因此我可以简单地生成公共和私有API密钥作为加密安全随机数,并将其包含在我的请求正文中,由我的后端授权,这些密钥存储在某处?

同样,我不感兴趣保护请求在从客户端到我的服务器的过程中,而是授权“用户”(在这种情况下,开发人员)。非常感谢此方案的任何反馈/见解/最佳实践。

-

编辑:不确定代码是否真的有用,但这是我的API的精简版本。

public class MyApi {

  public MyApi() {

  }

  public CEDataTransformResponse transformData(CEDataTransformRequest request) throws UnauthorizedException {

    CERequestHeader header = request.getHeader();
    if (header == null) {
      throw new UnauthorizedException("Missing header.");
    }
    authorizeToken(header.getToken());

    CEDataTransformResponse out = processRequestBody(request.getBody());

    return out;
  }

  private void authorizeToken(CEApiToken token) throws UnauthorizedException {
    // Current way
    if (!token.getToken().equals(Constants.TOKEN)) {
      throw new UnauthorizedException("Unauthorized");
    }

    // Future way?
    String apiKey = token.getApiKey(); String apiSecret = token.getApiSecret();
    if !((mDatastore.containsKey(apiKey)) && (mDatastore.getValue(apiKey) == apiSecret)) {
      throw new UnauthorizedException("Unauthorized");
    }
  }
}

在“未来的方式”中,假设mDatastore是键值存储的一些包装器。我忽略了我会做的任何哈希。

我已经考虑过在Cloud Platform开发人员控制台中生成客户端ID,但这太过于手动;当新开发者注册/下载我的sdk /请求密钥时,这需要以编程方式进行。

1 个答案:

答案 0 :(得分:0)

好的,这里有几点。

  1. 使用SO时,您应该发布代码。问题需要采取特定编程问题的形式,10次中有9次,这意味着发布您的代码。

  2. 无论如何,您需要展示自己的所作所为,已完成的研究以及当前的错误/障碍。发布问题时请记住这一点,因此请更新您当前的问题。

  3. 关于您的问题,您的“API密钥”实际上只是一个“用户”。创建登录系统,并使用OAUTH进行授权。您可以跟踪用户并向他们提供所需的任何凭据。同样,OAUTH应该具有在传输过程中保护数据的额外好处。

相关问题