使用 AWS API Gateway 验证会话

Posted

技术标签:

【中文标题】使用 AWS API Gateway 验证会话【英文标题】:Authenticate session with AWS API Gateway 【发布时间】:2021-09-05 05:58:30 【问题描述】:

情况:我有一个应用程序(Vercel 上的 Next.js/React)在 example.com 上运行。我在 api.example.com 上有一个 api(AWS API 网关)。目前 example.com 上的应用程序支持使用 Auth0 作为身份验证提供程序登录。

问题:我希望能够从应用程序 (example.com) 向 api (api.example.com)。

在架构上,我希望 API 网关 (api.example.com) 有一种方法来处理来自 app/Auth0 cookie (example.com) 的经过身份验证的会话>)。我认为浏览器可以共享 cookie(因为 api.example.com 是受信任的)并且 API 可以验证它。

但我没有看到 标准 方法来做到这一点。我想我可以尝试为 AWS 的 API Gateway 创建一些自定义 lambda 授权器。但由于我们正在处理身份验证,我更愿意尽可能多地外包并避免任何自定义代码。我似乎无法拼凑出 API Gateway 处理会话的方式,我认为这将是一个非常常见的问题。

旁注:以前,我使用嵌入到 Next.js 中的 pages/api 直接调用 AWS 上的 Lambda 并公开它们。有了这个,身份验证就可以正常工作。这就是我现在尝试重新创建的体验,但用户无需往返。

【问题讨论】:

【参考方案1】:

当您想要保护 API 时,最好使用 JWT 令牌来传递必要的声明,例如已认证用户的 id。 OpenID connect 和 Oauth2.0 是值得研究的标准。

Auth0 有推荐认证流程的文档:https://auth0.com/docs/flows/authorization-code-flow

以及 Api Gateway 的 HTTP api 示例:https://auth0.com/blog/securing-aws-http-apis-with-jwt-authorizers/

AWS 文档有更多关于 Http API 和 JWT 令牌授权者的信息:https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-jwt-authorizer.html

如果您的 Api 网关使用的是 Rest api 而不是更轻量级的 Http api,那么基于令牌的 Lambda 授权方是正确的解决方案:https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html

【讨论】:

以上是关于使用 AWS API Gateway 验证会话的主要内容,如果未能解决你的问题,请参考以下文章

Google Cloud Api Gateway 是不是提供请求签名和验证 sdk,例如使用 Signature 4 签署 AWS API Gateway 请求?

使用 AWS API Gateway 进行客户端 TLS 身份验证

如何使用 AWS API Gateway 设置 OAuth2 身份验证提供程序?

从查询字符串中的令牌授权 AWS API Gateway 请求

CloudFront 后面的 API Gateway 不支持 AWS_IAM 身份验证吗?

AWS API Gateway 身份验证错误 IncompleteSignatureException 使用带有 Auth0 的 JWT