我已经设置了带有认知身份验证的api网关,但需要将一些请求传递给另一个具有自己的身份验证的rest服务,在该服务中,您需要提供clientID和秘密来接收有效期为几个小时的承载令牌。
我不需要对请求进行任何更改,只需添加令牌并将其传递给rest服务,然后接收答案并将其传递给客户端。
由于令牌将在几个小时内有效,因此我不希望在每次请求时都请求令牌以节省时间。
我可以在哪里保存有效的令牌?Api网关还是lambda函数?Lambda函数是无状态的,据我所知,它没有存储。
谢谢
发布于 2020-12-17 09:30:40
要实现这一点,有多种方法。我给你两个建议,我认为在你的情况下是有意义的:
Lambda实例中的缓存密钥
您可以在Lambda函数中缓存数据。这通常发生在Lambda处理程序函数之外的代码中(例如,对于Node.js,在调用处理程序函数之前初始化处理程序函数之外的所有内容)。
是的,您是对的,Lambda函数应该是无状态的。然而,函数实例正在被重用。因此,如果您确信Lambda函数只用于这一目的(即缓存这样的键是安全的),并且您可以使用相同的键调用外部端点一段时间,您可以通过缓存它来调整性能,并且只在其过期时更新它。这样,您需要在第一次调用中检索密钥,并且只对同一个函数实例的每一次调用进行读取。(或者,如果您不信任这种缓存机制,则将数据存储在/tmp中)我不久前编写了一个关于AWS Lambda缓存的博客文章,它更详细地解释了这种方法。如果你有问题请告诉我。
优势:代码中的缓存相对容易。
将密钥存储在秘密管理器中
您可以将密钥“外包”给机密经理,而不是在同一个Lambda函数中检索和缓存密钥。这意味着,您在“秘密管理器”中添加一个新的密钥/秘密,并在其过期前每隔几个小时附加一个分离Lambda函数旋转键。然后,在原来的Lambda函数中,您只需从Secrets检索密钥即可。为了稍微优化Lambda的成本和性能,我仍然建议缓存密钥一段时间,如上面所述。
优势:分离关注点。
发布于 2020-12-17 08:59:59
在lambda引导期间获取一个令牌,将它作为安全字符串写入参数存储,在需要时从参数存储中获取它,或者将它保存在内存中(取决于您期望lambda运行的频率)??当令牌过期且您的应用程序仍在运行时,只需重新调用该方法并将其再次写入参数存储。
https://stackoverflow.com/questions/65336330
复制相似问题