在方法请求中使用 AWS_IAM 授权时需要 AWS Gateway 自定义授权者吗?

Posted

技术标签:

【中文标题】在方法请求中使用 AWS_IAM 授权时需要 AWS Gateway 自定义授权者吗?【英文标题】:AWS Gateway custom authorizer necessary when using AWS_IAM authorization in Method Request? 【发布时间】:2018-01-16 11:25:06 【问题描述】:

我使用 AWS Gateway 作为我的 Web API,使用 AWS Lambda 作为我的无服务器后端。 Lambda 函数仅由我的网关 API 调用。通过 Lambda,我在其他 AWS 服务(RDS、SNS 等)上调用和执行操作。 我只希望我的客户能够访问我的 Web API。为此,我使用 AWS_IAM 授权设置了我的所有网关 API。未经身份验证的客户端只有允许他调用的策略,例如登录/注册用户的功能。相比之下,经过身份验证的客户端具有使他能够访问更多资源的策略。

现在的问题是:因为我只希望我的客户能够访问我的网关 API 并尽可能安全,是否有必要创建一个自定义授权器来检查令牌的有效性?

我没有设置认知用户池,也没有设置外部公共提供商(谷歌、Facebook、openId、亚马逊等)。我正在使用自定义开发人员身份验证身份。所有用户都保存在 AWS RDS 中。当用户尝试登录并通过他的电子邮件和密码进行正确身份验证时,一个开放的 id 和一个 jwt 令牌将返回给客户端。这是通过调用“getOpenIdTokenForDeveloperIdentity”来完成的。

我在网上找到了一些资源,人们在其中创建了自定义授权方,但他们确实总是通过外部提供商(google、facebook、auth0 等)验证令牌的有效性。该成员确实写道,当您拥有“[...]一些完全不同的身份验证逻辑[...]”https://***.com/a/39407156/5181862时,您只需要拥有一个外部提供者。我不认为这里是这种情况。

运行应用程序的客户端是 ios 和更高版本的 android 设备(如果需要此信息)。

【问题讨论】:

【参考方案1】:

如果所有 API 都有 AWS_IAM 授权,那已经非常安全了。 AWS_IAM 要求客户端具有来自与 API 相同的账户(您的账户)的有效 AWS 凭证。

听起来您正在使用 Cognito(谈论未经身份验证的客户端策略),在这种情况下,如果正确实施,您的授权模型是安全的。

【讨论】:

好的,很高兴听到来自 aws 团队的消息。谢谢你。我已经实施了最终解决方案,是的,我正在使用 AWS Cognito。我会为面临同样问题的其他人更新我的答案。

以上是关于在方法请求中使用 AWS_IAM 授权时需要 AWS Gateway 自定义授权者吗?的主要内容,如果未能解决你的问题,请参考以下文章

AppSync:使用 AWS_IAM 身份验证时在 $context 中获取用户信息

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

在获取请求中提供授权时,在需要授权的nodeJS中抓取网站?

只请求请求始终授权,而不是使用时授权

删除 PHAsset 时禁用授权请求

使用 OPTIONS 方法未使用 http 请求 Angular 6 发送授权标头