我目前已经使用AWS创建了一个API网关。此网关需要存储在AWS上的API密钥。据我所知,在头部中传递此密钥的正确方法是使用x-api-key
。为了连续性,我希望有一种方法可以使用key Authorization
而不是x-api-key
在帖子的标题中传递密钥。据我所知,由于此网关托管在亚马逊网络服务中,因此x-api-key
是传递密钥的唯一方式。有什么解决方法吗?
发布于 2020-11-19 00:25:39
Lambda授权程序
如果你只是坚持这个约定,那就更容易了,要改变这一点实际上需要一些工作。您需要创建一个Lambda Authorizer。这将是一个Lambda函数,它将向您的网关返回给定请求的iam
策略,但也是一个可选的context
。这个上下文可以包含应该使用的API密钥,尽管您需要记住您的Lambda函数执行授权,但这个密钥只在我相信的使用计划中使用。
因此,总而言之,在创建授权器时,您将选择在本例中使用的Authorizaion
标头。在Lambda函数中,这里引用了这个头文件:event.authorizationToken
。使用这个头构建您的iam
策略,这可能意味着您需要手动查找此API,如果它确实可以访问您的API。您的Lambda函数还需要将api-key设置为$context.authorizer
,它包含您想要使用的api,在本例中为event.authorizationToken
。这将把UsagePlan应用于你的应用程序接口。
CloudFront
另一种选择是在你的应用程序接口前面创建一个CloudFront发行版,然后自己手动添加头部。这可能会花费更多,因为您将需要一个CloudFront发行版,然后您的Lambda@Edge将针对每个请求执行。而不是可以缓存的Lambda Authorizer。您可以找到一个示例here。
https://stackoverflow.com/questions/64900022
复制相似问题