繁体   English   中英

如何检查 AWS API 网关授权方中的用户角色?

[英]How to check for user role in AWS API gateway authorizer?

我正在尝试使用 AWS Cognito 和 AWS API 网关进行身份验证和授权。 我设法在登录时为用户提供了一个 JWT 令牌,并且在我的网关上执行某个获取请求时,它会检查授权 header 并使用 Cognito(用户池)对其进行验证。

我面临的问题是它不检查任何用户角色。 某些用户在我的 Cognito 管理员组中,但我不能指定只有来自管理员组的用户才能发出此类请求。 目前,如果任何拥有有效 JWT 令牌的用户在 API 网关上执行该 GET 请求,它就会执行它。

我想我可以使用自定义 lambda 授权方来检查角色。 这不是很安全,因为你(一个潜在的黑客)仍然可以使用 JWT 令牌来改变它

  "cognito:groups": [
    "User"
  ],
  "iss": "",
  "version": 2,
  "client_id": "6uad7uthfhv3a7p9aihdbjl3tt",
  "token_use": "access",
  "scope": "aws.cognito.signin.user.admin phone openid profile email",
  "auth_time": 1668780261,
  "exp": 1668783861,
  "iat": 1668780262,
  "jti": "",
  "username": "test"
}

对此:

  "cognito:groups": [
    "Admins"
  ],
  "iss": "",
  "version": 2,
  "client_id": "6uad7uthfhv3a7p9aihdbjl3tt",
  "token_use": "access",
  "scope": "aws.cognito.signin.user.admin phone openid profile email",
  "auth_time": 1668780261,
  "exp": 1668783861,
  "iat": 1668780262,
  "jti": "",
  "username": "test"
}

并再次对令牌进行编码,以进行他不应该进行的 API 次调用。

我的另一个想法是直接使用 Cognito 从 Lambda 授权方检查用户是否具有正确的角色,但我不知道这是否可行。

是否有更好、更合乎逻辑的方法来检查 Cognito 用户是否在用户池中以及它是否具有正确的角色?

首先,我们应该有一个正确实施的 JWT 验证机制。 这样,可以轻松识别被篡改的令牌。

请阅读本文了解更多详情。 它说:

JSON Web 令牌是在各方之间安全传输信息的好方法。 因为 JWT 可以签名——例如,使用公钥/私钥对——你可以确定发送者是他们所说的人。 此外,由于签名是使用 header 和有效负载计算的,您还可以验证内容是否未被篡改。

因此,在Lambda 授权方中,我们可以进行 JWT 验证。 然后根据请求路径和分配的角色,它应该能够决定是否调用 API。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM