当前位置: 首页 > 知识库问答 >
问题:

具有认知授权的AWS API网关

微生啸
2023-03-14

目前,我正在开发无服务器架构,其中AWSAPI网关中有一组资源和方法。我计划将Cognito身份验证(用户池)和授权作为安全层添加到AWS API网关。

AWS API Gateway中有3个授权者,分别是IAM、Cognito用户池和custom lambda。

在我的用例中,登录和注册(身份验证)通过API网关使用Cognoto用户池。这是完美的作品。我的用户将获得应用程序客户端id和客户端密码以启用这两个进程。登录后,我的目的是让用户能够使用访问令牌(由用户池返回)通过api网关访问资源。

然而,我的用户可以有不同的角色,如管理员,所有者或客人。用户只能访问授权的api。我的方法是将用户放入用户池中的不同组,将IAM策略分配给组并启用身份池。这迫使我将api gateway中的授权类型改为IAM。和IAM要求每个请求都由签名V4签名。

这意味着每个请求都必须通过会话令牌、访问密钥和密钥(在使用联邦池的exchange id令牌后返回)注册,而不是使用基于访问令牌的方法。因此,在我的用例中,在用户通过api网关登录后,我的客户端应用程序(web/mobile/postman工具)必须生成签名并放入授权标头。是否有其他方法控制用户池组中的授权,但在api网关中使用访问令牌?我的理解是,访问令牌(在授权头中)比复杂的签名过程更容易使用。

如果我错了,请纠正我。谢谢

共有2个答案

刘玉石
2023-03-14

您走在正确的轨道上,但您选择了在 AWS 上授权用户请求的路径之一。您正在使用 IAM 和身份池,因此,您将被迫使用 AWS 提供的签名 V4 对每个请求进行签名。

我建议根据我的经验,而不是选择自定义 Lambda 授权方而不是身份池。在这种情况下,您的身份验证将保持您已经构建的原样。但是,您可以创建一个 lambda 函数,而不是在 API 网关中将 IAM 应用为授权者,该函数将接收用户在请求中要在请求中授权的 API 网关的 ARN,并在您从用户池进行身份验证期间收到用户ID_TOKEN

{
  ...
  "cognito:roles": [
    "arn:aws:iam::**********:role/addBookSellerRole"
  ],
  "exp": 1565758916,
  "iat": 1565755316,
  ...
}

您可以看到,您将从身份验证收到的 JWT 中ID_TOKEN获取角色数组。您可以使用此角色将附加的策略提取到此角色。按照本文档从角色中提取策略。

获得策略JSON后,您可以将其与请求中收到的方法的ARN与策略列表进行比较。这样,您必须生成一个允许或拒绝请求的策略文档。

要了解更多信息,请使用Cognito API Gateway IAM访问我的媒体博客授权。

苏承载
2023-03-14

这会有帮助吗?

在用户池中创建组,并将IAM角色分配给该组。

然后将用户添加到组。

更多留档:https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-user-groups.html

 类似资料:
  • 我试图让我的API网关与Cognito用户池授权器一起工作,但我似乎无法让它工作。我现在没有使用任何SDK。一些细节-对于Cognito pool,我将设置ID provider设置为Cognito user pool,Oauth flow'impilicit grant‘和scope设置为'openid'。创建了一个应用程序(&domain),还生成了客户端机密。电子邮件是唯一的字段。-在API

  • 一个简单的APIendpoint,带有一个Cognito用户池授权器,当使用授权器测试按钮(或使用邮差/失眠)和一个有效令牌失败时(截图bellow): 我知道该令牌是有效的,因为我可以使用相同的令牌成功调用Cognito用户池endpoint,并返回所需的响应。此外,删除授权程序(将其设置为),也将返回所需的响应。我试过带或不带,我还试过将令牌源更改为,这是我在一些旧问题中发现的,但保存后立即又

  • 我正在尝试将AWSAPI网关授权器与cognito用户池一起使用。当我使用AWSAPI网关控制台进行测试时,它运行良好。 但当我尝试在api中启用授权时,它会显示请查看下面的屏幕截图 有人能帮忙吗? 仅供参考,我已经按照这里提到的说明http://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-wi

  • Serenity 使用一些抽象(abstractions)来与你的应用程序自身的用户身份验证和授权机制一起工作。 Serenity.Abstractions.IAuthenticationService Serenity.Abstractions.IAuthorizationService Serenity.Abstractions.IPermissionService Serenity.Abst

  • 请求地址 https://api.es.xiaojukeji.com/river/Auth/authorize 返回数据格式 JSON 请求方式 POST 是否需要登录 否 访问授权限制 调用方访问授权后,将返回的授权信息缓存半小时(缓存过期或调用服务时返回401=>access_token不合法或已过期,再重新申请授权),不要每次调用接口都申请一次授权。 请求参数 名称 类型 必选 描述 cli

  • 说明 调用方访问授权后,将返回的授权信息缓存半小时(缓存过期或调用服务时返回401=>access_token不合法或已过期,再重新申请授权),不要每次调用接口都申请一次授权。 地址URL /v1/Auth/authorize 支持格式 Json或普通form HTTP请求方式 POST 是否需要登录 否 请求参数 名称 类型 必选 描述 client_id string yes 申请应用时分配的