【问题标题】:Cognito Role Based Authentication Not workingCognito 基于角色的身份验证不起作用
【发布时间】:2020-03-13 18:07:30
【问题描述】:

所以,我是 Cognito 的新手,并试图将它与我的 Lambda 函数联系起来。我正在尝试将我的 API 调用划分为不同的 IAM 角色。以下是我已经尝试过但未应用该政策的步骤:

  • 我先创建了一个 User Pool 及其 App Client,并将 Pool 分为三个 Group。

  • 我使用用户池 ID 和客户端 ID 创建了一个联合身份。对于角色选择,我做了 '从令牌中选择角色'。

  • 我使用身份 ID 创建了一个 IAM 角色,并将此策略附加到它:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Deny",
            "Action": "execute-api:*",
            "Resource": "*"
        }
    ]
}
  • 我将 IAM 角色附加到用户池组 1。

  • 我创建了一个 Cognito Authorizer,并将其附加到 API Gateway 中的 API。

  • 我创建了一个User,并将其分配给Group 1。登录后,我得到了一个ID_Token,其JWT 解密包括我附加的角色。

  • 最后,我使用令牌从邮递员发出请求,并期望响应为 禁止,因为我否认了政策中的所有内容。

最后得到的Response是200,访问没有限制。

【问题讨论】:

    标签: amazon-cognito


    【解决方案1】:

    APIGateway 仅使用 cognito 检查您的令牌是否有效。如果您随后使用令牌生成临时 AWS 凭证并使用它们向 AWS 资源(包括 APIGateway)发出任何请求,那么您将获得对您的请求的禁止响应。

    【讨论】:

    • 您是否将此授权方添加到 API 调用并重新发布 API?
    • 所以,我明白了。现在我可以使用 AWS 临时凭证来授权 API。但问题是这些凭据会在 1 小时后过期。有什么更好的方法呢?每隔 1 小时从后端请求这些凭据,还是在它们过期时使用 id_token 从前端获取它们?
    • 使用它的最佳方式是你以前的做法。只需将 id 令牌传递给您的后端,并将令牌转换为后端本身的凭据。在前端,您可以不断刷新令牌。大多数前端 AWS 库会在调用会话时自动刷新您的令牌,因此您甚至不需要自己编写刷新程序。
    • 后端是一个 Lambda 函数。您的意思是我应该在该函数中验证用户声明以返回资源还是不返回?
    • 使用授权器检查token是否有效且未过期。一旦 APIGateway 触发 lambda,将令牌转换为凭证。然后,您可以使用这些凭据从 lambda 本身执行操作,或者您可以使用它们对预签名的 url 进行签名,以便您的前端经过身份验证以执行某些任务。
    猜你喜欢
    • 2013-05-29
    • 1970-01-01
    • 2020-12-21
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 2019-01-19
    相关资源
    最近更新 更多