我正在尝试使用AWS认知和AWS API网关进行身份验证和授权。在登录和在网关上执行某个get请求时,我设法给用户提供了一个JWT令牌,它检查授权头,并使用认知(用户池)对其进行验证。
我面临的问题是,它不检查任何用户角色。某些用户在我的认知管理组中,但我不能指定只有来自admin组的用户才能提出这样的请求。目前,如果具有有效JWT令牌的任何用户在API网关上获得请求,则执行请求。
我想我可以使用一个定制的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调用。
我的另一个想法是,直接从Lambda授权人那里直接检查这个用户是否有正确的角色,但我不知道这是否可能。
是否有一种更好、更符合逻辑的方法来检查用户是否在用户池中,以及它是否具有正确的角色?
发布于 2022-11-22 05:22:45
首先,我们应该有一个正确实现的JWT验证机制。这样,就可以很容易地识别被篡改的令牌。
有关更多细节,请阅读这文章。上面写着:
JSON Web令牌是在各方之间安全地传输信息的一种好方法。因为JWT可以进行签名--例如,使用公钥/私钥对--所以您可以确保发件人是他们所称的发送者。此外,由于签名是使用报头和有效载荷计算的,您还可以验证内容没有被篡改。
因此,在Lambda授权程序中,我们可以进行JWT验证。然后,根据请求路径和指定的角色,它应该能够决定是否调用API。
https://stackoverflow.com/questions/74490638
复制相似问题