我正在使用 AWS(Lambda、API Gateway、Cognito 等)编写一个无服务器应用程序,我发现自己想知道如何最好地保护我的堆栈。
我读到,对于使用服务器、EC2 或其他方式的应用程序,最佳实践是将用户的 ID token 存储在后端。这是有道理的,因为节点进程将为我提供一个保留和重用 ID token 的长期解决方案。另一方面,无服务器应用程序则无法提供这种奢侈。我考虑过将其保留在前端 - 因为毕竟 Cognito 提供的 JWT token 是经过签名的,因此应该是防篡改的,但这对我来说似乎有点令人不安。我更喜欢用户无法直接访问自己的代币的系统。我还考虑过为发送到 Lambda 的每个请求请求一个新 token ,但这似乎也不是一个完美的解决方案。
围绕无服务器身份验证和授权是否存在某种公认的最佳实践?当用户打开应用程序时,我是否在正确的轨道上存储我的 token 客户端?
最佳答案
我没有发现存储您的 token 客户端存在问题。用户可以随时从 header 请求中复制粘贴 token 。 token 不是 secret 。它无法被篡改,因为它经过数字签名。
例如,下面是请求的 header 。 在授权中存储了可以在 https://jwt.io/ 中解码的 jwt token 但无法修改,
Host: aa.aa.aa
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:66.0) Gecko/20100101 Firefox/66.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer: token234567890-eddedede
X-Requested-With: XMLHttpRequest
Connection: keep-alive
此外,最佳做法是使 token 过期并按一定时间间隔续订。
关于amazon-web-services - 无服务器应用程序的访问 token 和 ID token 存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56047107/