Amazon web services 无服务器环境中多租户ID的AWS Cognito JWT vs URL路径参数

Amazon web services 无服务器环境中多租户ID的AWS Cognito JWT vs URL路径参数,amazon-web-services,aws-lambda,aws-api-gateway,amazon-cognito,multi-tenant,Amazon Web Services,Aws Lambda,Aws Api Gateway,Amazon Cognito,Multi Tenant,我正在构建一个多租户的无服务器应用程序。它使用AWSAPI网关将请求传送到Lambda服务,以进行数据更新和检索,并通过AWS Cognito对用户进行身份验证 但是,我不确定向Lambda函数提供适当的租户和用户信息以发出请求并限制租户之间的数据访问的最佳做法。一个示例请求是在数据库中发布一个新实体,该实体需要租户id作为主键,或者在GET请求中请求租户下的所有实体。这里很清楚,一个租户下的用户不应该访问另一个租户下的用户,因此必须验证租户id 将租户id作为URL路径传递,例如“*”。然后

我正在构建一个多租户的无服务器应用程序。它使用AWSAPI网关将请求传送到Lambda服务,以进行数据更新和检索,并通过AWS Cognito对用户进行身份验证

但是,我不确定向Lambda函数提供适当的租户和用户信息以发出请求并限制租户之间的数据访问的最佳做法。一个示例请求是在数据库中发布一个新实体,该实体需要租户id作为主键,或者在GET请求中请求租户下的所有实体。这里很清楚,一个租户下的用户不应该访问另一个租户下的用户,因此必须验证租户id

  • 将租户id作为URL路径传递,例如“*”。然后必须通过检查Cognito中的用户自定义属性与URL路径中提供的租户id匹配来验证此租户id
  • 使用Lambda函数直接处理的自定义声明传递Cognito JWT ID标记。这意味着使用解码函数直接从JWT检索这些声明以查找“tenant”:“custom:tenantid”
  • 将JWT访问令牌传递给Lambda函数,并使用Cognito服务调用对令牌进行身份验证并检索适当的属性。这意味着请求我的身份提供者Cognito提供租户id,该id被解析为自定义属性

所有的选项都提供了类似的结果,但我发现比较每种方法的信息非常少。在这种情况下是否有明确的赢家?

探索x-api-key,它可以作为标准http请求头,您可以在使用AWS api网关时使用x-api-key进行速率限制和访问控制,开箱即用。可能您可以在JWTs中使用x-api密钥作为自定义声明。非常感谢你看这个。我已经看过API键了,我不确定它们是否满足我的需要。但是,我可以使用它们提供额外的安全访问。我有多种方法从我的用户池中检索租户id,以便在与API网关关联的Lambda函数中使用,但是我不确定最佳方法。在以前的小型单片环境中,我使用了根据租户数据验证的URL路径。然而,这是一个更大的项目,我渴望减少时间和成本的最有效的方法的要求。好的。我觉得,传递自定义声明是更好的选择,您可以在API网关中使用Cognito authorizer进行身份验证,并在API集成请求中立即解码自定义声明,因此无需编写自定义lambda。而且,由于它都是经过管理的,所以不必太担心扩展。