当前位置: 首页 > 知识库问答 >
问题:

UnrecognizedClientException”、“errorMessage”:“在本地测试lambda函数时,请求中包含的安全令牌无效

叶琦
2023-03-14

我试图使用aws sam在本地调用lambda函数进行测试。该函数从Dynamodb表中读取一个项。我已经旋转了一个本地Dynamodb容器,在那里创建了所需的表。

运行下面的命令来创建一个本地Dynamodb容器。

  1. docker网络创建lambda本地

然后使用下面的命令,我能够验证所有的工作都很好,就本地dynamodb而言。

    超文本传输协议://localhsot: 8000

但是,当我尝试运行下面的命令时,我得到了一个错误。

sam local invoke <lambdaFunctionName> --docker-network lambda-local

我得到的错误-

START RequestId: 043b493d-8457-43f1-8eeb-dc641ac3816f Version: $LATEST
2021-10-27T08:17:00.778Z        043b493d-8457-43f1-8eeb-dc641ac3816f    ERROR   Invoke Error    
{"errorType":"UnrecognizedClientException","errorMessage":"The security token included in the request is invalid",
"code":"UnrecognizedClientException","message":"The security token included in the request is invalid","time":"2021-10-27T08:17:00.775Z","requestId":"NG2U0AEVI320VL5PLPTK8H3G63VV4KQNSO5AEMVJF66Q9ASUAAJG","statusCode":400,"retryable":false,"retryDelay":46.55385931289337,"stack":["UnrecognizedClientException: The security token included in the request is invalid","    at Request.extractError (/var/runtime/node_modules/aws-sdk/lib/protocol/json.js:52:27)","    at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:106:20)","    at Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:78:10)","    at Request.emit (/var/runtime/node_modules/aws-sdk/lib/request.js:688:14)","    at Request.transition (/var/runtime/node_modules/aws-sdk/lib/request.js:22:10)","    at AcceptorStateMachine.runTo (/var/runtime/node_modules/aws-sdk/lib/state_machine.js:14:12)","    at /var/runtime/node_modules/aws-sdk/lib/state_machine.js:26:10","    at Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:38:9)","    at Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:690:12)","    at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:116:18)"]}
END RequestId: 043b493d-8457-43f1-8eeb-dc641ac3816f

我错过了什么?使用sam在本地调用lambda函数并将其连接到本地运行的dynamodb容器还需要其他步骤吗?

lambda码

var AWS = require('aws-sdk');
AWS.config.update({region: 'us-east-1'});

exports.lambdaHandler = async (event, context) => {
    const dynamoDB = new AWS.DynamoDB.DocumentClient();
    const params = {
        TableName: 'employees',
        Key: {
            name: "naxi"
        }
    };

    const result = await dynamoDB.get(params).promise();
    if (result.Item) {
        return result.Item;
    } else {
        return { error: 'Task not found.' };
    }
};

共有1个答案

慕云
2023-03-14

您需要使用AWS CLI在本地计算机中配置访问和密钥以及区域。引发此错误的原因是没有正确的访问权限和密钥,或者没有对其进行配置。

参考以下链接:https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html

 类似资料:
  • 我使用Localstack和Test容器((test容器: localstack: 1.15.2))进行集成测试,并在测试设置中设置秘密,如下所示:代码示例 现在,测试因错误而崩溃: com.amazonaws.services.secretsmanager.model.AWSSecretsManagerException:请求中包含的安全令牌无效。(服务:AWSSecuresManager;状态

  • 我是新来的AWS和我试图执行CRUD操作本地DynamoDB从一个Java程序。Java程序是一个AWS示例。 我安装了AWS CLI并设置了以下配置-根据AWS文档,我不需要本地DynamoDB的真正AWS访问和密钥。 我在~/中设置了以下值。aws/config和~/。通过在aws CLI中运行aws configure获得aws/credentials。 我有本地DYnamoDB JAR与此

  • 该文件存储在脚本中,位于AWS S3中。

  • 问题内容: 我有一个使用node.js express开发的移动应用程序后端。我尝试将其部署为lambda服务。为此,我创建了一个无服务器框架项目(https://github.com/serverless)。以前,我通过启动快速后端应用程序在本地测试了移动应用程序。现在,我找不到没有本地后端就可以在本地测试我的移动应用程序的方法。命令只在我调用一次后运行。 有什么方法可以将lambda函数作为W

  • 我想使用jwt令牌向我的应用程序添加身份验证。 每次向服务器发送请求时,我都会附加服务器创建的令牌。 我受伤了,这是在标头中发送令牌的安全方式吗?如果有人访问我的计算机并在 DevTools 选项卡中检查我的网络并看到我的令牌,他可以使用令牌模拟请求并控制用户数据。 这是常见的情况吗?以及窃取和黑客 JWT 代币的方法?

  • 免责声明 - 我在stackoverflow上看了很多类似的问题。 我有一个后端正在运行”https://api.website.com“和一个运行在上的前端”https://admin.website.com“后端的CORS策略设置如下: 在对“https://api.website.com”执行GET请求后,前端成功接收为域“api.website.com”设置的XSRF-TOKEN cook