我要做的是设置通往我的lambda函数的API网关,该函数保存在DynamoDB中(或其他我只想登录用户的东西)。但是我不明白如何验证访问权限以及如何从中获取用户。
我在AWS论坛上找到了这篇文章,我决定尝试方法1。
cognito用户池 API网关 API网关自定义授权器 cognito用户池访问令牌。
所以现在我登录了用户:
var authenticationData = {
Username : 'username', // your username here
Password : 'password', // your password here
};
var authenticationDetails = new AWSCognito.CognitoIdentityServiceProvider.AuthenticationDetails(authenticationData);
var cognitoUser = new AWSCognito.CognitoIdentityServiceProvider.CognitoUser(userData);
cognitoUser.authenticateUser(authenticationDetails, {
onSuccess: function (result) {
console.log('access token + ' + result.getAccessToken().getJwtToken());
....
和他的访问。我还在我的API调用中设置了自定义API网关自定义授权器。
现在,我应该验证访问令牌并决定是允许还是拒绝方法。但是我不明白该怎么做以及如何从令牌中检索用户?
您不需要API Gateway自定义授权器...只是为了验证API终点 - foto ando toce unts uts unts请求,然后选择AWS_IAM进行授权下拉。。
当访问令牌发送到此终点时 - 它将自动检查访问令牌角色(与Cognito Service进行沟通后)并检查带有该角色的策略。
如果IAM策略允许调用此终点-AWS API将进一步执行它,否则将使您返回403错误或某些错误
您不需要编写任何代码 - 除非您有一些完全不同的验证逻辑要应用 - 可以通过" API Gateway自定义授权器"来实现
for cognito用户池 API网关 API网关自定义授权器 cognito用户池访问令牌
您应该创建Cognito授权器(创建自定义授权器时作为选项可用),然后链接您的用户池&身份池,然后客户需要发送iDtoken(使用用户池SDK生成)以访问端点。这种iDtoken将通过Coginito授权者Cognito Identity池进行验证(在授权方法下拉列表中使用)。
可以使用另一个lambda 端点(例如登录端点)来完成SDK生成的IDTOKEN,也可以使用Cognito Mobile SDK生成。
您可以使用NPM软件包AWS-JWT-Verify进行相同的
参考:https://github.com/awslabs/aws-jwt-verify
import { CognitoJwtVerifier } from "aws-jwt-verify";
// Verifier that expects valid access tokens:
const verifier = CognitoJwtVerifier.create({
userPoolId: "<user_pool_id>",
tokenUse: "access",
clientId: "<client_id>",
});
try {
const payload = await verifier.verify(
"eyJraWQeyJhdF9oYXNoIjoidk..." // the JWT as string
);
console.log("Token is valid. Payload:", payload);
} catch {
console.log("Token not valid!");
}