将用户的API密钥对用于API网关

时间:2019-02-19 19:46:32

标签: amazon-web-services api authorization aws-api-gateway api-key

我有一个Web应用程序,其API均在 AWS API网关之后运行。当前已使用认知令牌进行了身份验证。

现在,我希望用户能够设置API密钥对(ID和密钥),以便他们将拥有一种替代的方式来以编程方式进行身份验证和访问其帐户,类似于此(https://support.binance.com/hc/en-us/articles/360002502072-How-to-create-API)。

我知道一些解决方案(非最佳IMO,如果我错了,请纠正我):

    可以使用来自API网关的
  1. API密钥,但是根据文档,它并不用于身份验证。
  2. 我们可以使用IAM凭据,但是我不确定将IAM凭据分配给用户(而不是内部开发人员)是否是一种好习惯。

使用API​​网关实现类似(https://support.binance.com/hc/en-us/articles/360002502072-How-to-create-API)的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

我建议实现基于请求的Lambda授权器[1]。 查看您的示例,您似乎还希望执行一些自定义的安全策略(即,基于IP地址的检查,启用特定的API)。

  • 您的Cognito用户池仍将用于对您的Web应用程序进行基于用户名/密码的身份验证。
  • 我的想法是将用户的API密钥和自定义安全策略存储在单独的数据存储区(例如DynamoDB)中。
  • 然后,用户可以在调用API时使用这些API密钥。
  • API网关将触发Lambda授权者,并且Lambda授权者负责验证传入请求中的API密钥,并根据您的自定义安全策略生成IAM策略。

[1]参见https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html

中名为“创建REQUEST类型的Lambda授权者的Lambda函数”一节。