[英]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.