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

AWS Local DynamoDB请求中包含的安全令牌无效

丁雅惠
2023-03-14

我是新来的AWS和我试图执行CRUD操作本地DynamoDB从一个Java程序。Java程序是一个AWS示例。

我安装了AWS CLI并设置了以下配置-根据AWS文档,我不需要本地DynamoDB的真正AWS访问和密钥。

我在~/中设置了以下值。aws/config和~/。通过在aws CLI中运行aws configure获得aws/credentials。

[default]
aws_access_key_id = ''
aws_secret_access_key = ''
[default]
region = ap-south-1

我有本地DYnamoDB JAR与此运行。

java-Djava。图书馆路径=/DynamoDBLocal_lib-jar DynamoDBLocal。jar-sharedDb

我试图运行的代码是这样的。

https://github.com/aws-samples/aws-dynamodb-examples/blob/master/src/main/java/com/amazonaws/codesamples/datamodeling/ObjectPersistenceCRUDExample.java

然而,我得到了这个例外。

亚马逊动态数据库异常:请求中包含的安全令牌无效。

完整的堆栈如下所示。

    Exception in thread "main" com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException: The security token included in the request is invalid. (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: UnrecognizedClientException; Request ID: UPGRD2BRNUN6S1702EN6N6S8RJVV4KQNSO5AEMVJF66Q9ASUAAJG)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1695)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1350)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1101)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:758)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:732)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:714)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:674)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:656)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:520)
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.doInvoke(AmazonDynamoDBClient.java:4192)
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.invoke(AmazonDynamoDBClient.java:4159)
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.executeUpdateItem(AmazonDynamoDBClient.java:3868)
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.updateItem(AmazonDynamoDBClient.java:3835)
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper$SaveObjectHandler.doUpdateItem(DynamoDBMapper.java:854)
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper$2.executeLowLevelRequest(DynamoDBMapper.java:594)
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper$SaveObjectHandler.execute(DynamoDBMapper.java:733)
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.save(DynamoDBMapper.java:623)
    at com.amazonaws.services.dynamodbv2.datamodeling.AbstractDynamoDBMapper.save(AbstractDynamoDBMapper.java:123)
    at com.stackroute.Main.testCRUDOperations(Main.java:60
    at com.stackroute.Main.main(Main.java:17)

任何帮助将高度赞赏。提前感谢。

共有2个答案

束高雅
2023-03-14

确切地说,问题似乎确实指向AWS上的DynamoDB,而不是本地的,尽管我无法验证原始评论中的这一点,因为链接现在断开了,至少这是发生在我身上的事情。

解决方案是显式连接到本地DynamoBD(需要安装),这是实现此功能的代码:

AmazonDynamoDBClientBuilder.standard().withEndpointConfiguration(
            // we can use any region here
            new AwsClientBuilder.EndpointConfiguration("http://localhost:8000", "us-west-2"))
            .build();

这是指向先前注释中提到的已删除的示例类的链接(您需要单击DynamoDBLocalFixture.java类的Load Diff):https://github.com/aws-samples/aws-dynamodb-examples/commit/461b0e85bfad58f4a62c63f38426c650896fb870#diff-B331539C5E8B0398D9BBB85C5B87A4CDFA32EFB27F68F3402C2223B243B178

袁琪
2023-03-14

据我所知,引用的代码中没有任何内容指向DynamoDB本地实例。它看起来像是指向DynamoDB本身。

您需要将endpoint更改为本地版本。请看这一页。它有一个将endpoint更改为localhost:8080的示例。

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

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

  • 我试图使用aws sam在本地调用lambda函数进行测试。该函数从Dynamodb表中读取一个项。我已经旋转了一个本地Dynamodb容器,在那里创建了所需的表。 运行下面的命令来创建一个本地Dynamodb容器。 docker网络创建lambda本地 然后使用下面的命令,我能够验证所有的工作都很好,就本地dynamodb而言。 超文本传输协议://localhsot: 8000 但是,当我尝试

  • 概述 我将使用API网关作为基于Spring Security性的身份验证。我刚刚按照https://spring.io/guides/tutorials/spring-security-and-angular-js/链接中的步骤创建了一个基于其对应的github项目的“对双”模块的项目https://github.com/spring-guides/tut-spring-security-and

  • Im使用Spring-Security和JWT库生成令牌。当用户通过身份验证时,我得到授权令牌作为响应: 在所有教程中,我都看到作者在使用POSTMAN发送GET请求时将此令牌粘贴在授权标头中,但没有教程说明它如何在实际请求中工作。尽管在我的邮递员中,当我粘贴标题时,它是有效的,我得到了200个OK。 我想知道如何在真正的代码中包含这个标题? 编辑 这是我的前端请求。在这个调用之后,我得到带有授权

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