繁体   English   中英

为App Engine后端生成API密钥

[英]Generating API Keys for an App Engine Backend

我有一个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. 使用SO时,您应该发布代码。 问题需要采用特定的编程问题的形式,每10个问题中有9个问题,这意味着要发布代码。

  2. 无论如何,您都需要展示您所做的工作,进行的研究以及当前的错误/障碍。 发布问题时请记住这一点,因此,请更新您当前的问题。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM