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

AWS IOT-Credential的作用域应该是正确的服务

曹兴贤
2023-03-14

我试图访问一个简单的AWS IOT REST服务,但我还没有成功做到这一点。以下是我所做的。

>

  • 我在aws中创建了一个iam用户,并下载了访问密钥和密钥
  • 与该用户登录到AWS IOT并创建了一个“东西”
  • 从该东西的属性中,我找到了影子的REST URL
  • 使用带有新的“AWS签名”功能的邮递员,并为其提供了访问密钥、秘密密钥、区域(us-east-1)和服务名称(iot)
  • 试图“得到”endpoint,这就是我得到的-

    String awsAccessKey = "fasfasfasdfsdafs";
    String awsSecretKey = "asdfasdfasfasdfasdfasdf/asdfsdafsd/fsdafasdf";
    
    URL  endpointUrl = null;
    String regionName = "us-east-1";
    try {
        endpointUrl = new URL("https://dasfsdfasdf.iot.us-east-1.amazonaws.com/things/SOMETHING/shadow");
    }catch (Exception e){
        e.printStackTrace();
    }
    Map<String, String> headers = new HashMap<String, String>();
    headers.put("x-amz-content-sha256", AWSSignerBase.EMPTY_BODY_SHA256);
    
    AWSSignerForAuthorizationHeader signer = new AWSSignerForAuthorizationHeader(
            endpointUrl, "GET", "iot", regionName);
    String authorization = signer.computeSignature(headers,
            null, // no query parameters
            AWSSignerBase.EMPTY_BODY_SHA256,
            awsAccessKey,
            awsSecretKey);
    
    // place the computed signature into a formatted 'Authorization' header
    // and call S3
    headers.put("Authorization", authorization);
    String response = HttpUtils.invokeHttpRequest(endpointUrl, "GET", headers, null);
    System.out.println("--------- Response content ---------");
    System.out.println(response);
    System.out.println("------------------------------------");
    

    这给了我同样的错误-

    --------- Request headers ---------
    x-amz-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
    Authorization: AWS4-HMAC-SHA256 Credential=fasfasfasdfsdafs/20160212/us-east-1/iot/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=3b2194051a8dde8fe617219c78c2a79b77ec92338028e9e917a74e8307f4e914
    x-amz-date: 20160212T182525Z
    Host: dasfsdfasdf.iot.us-east-1.amazonaws.com
    --------- Response content ---------
    {"message":"Credential should be scoped to correct service. ","traceId":"cd3e0d96-82fa-4da5-a4e1-b736af6c5e34"}
    ------------------------------------
    

    有人能告诉我我做错了什么吗?AWS文档没有关于此错误的太多信息。请帮忙

  • 共有1个答案

    夹谷岳
    2023-03-14

    如果IoT
    使用Iotdata签名,请改为使用Iotdata签名。示例:

    AWSSignerForAuthorizationHeader signer = new AWSSignerForAuthorizationHeader(
        endpointUrl, "GET", "iotdata", regionName);
    
     类似资料:
    • 服务帐户是否打算在应用程序的域中创建?还是在客户的G Suite域中,代表应用程序? 背景: 我的公司有一个产品(以下简称“应用程序”),它有几千个组织作为客户,每个组织都可能拥有自己的Google域。(以下简称“组织域”) 我们希望在应用程序和组织域之间建立同步,用于应用程序和组织域之间的通用数据,并希望使用 OAuth2 连接,由域管理员代表其用户授予应用程序的“域范围权限”,以进行脱机同步。

    • 每次我在手机上运行应用程序都会崩溃。有什么不对劲吗?它说不幸的是“appname”已经停止工作。我也尝试过其他方法来检查Google Play服务,但它总是崩溃。我更新了我的google play服务,让一个运行良好的google map v2完美运行。这个代码有什么解决方案吗?它在我运行android 4.1.2的手机和我的AVD上崩溃。

    • 短版 Spotify Android应用程序在最近的一个版本中引入了一个“设备广播状态”开关,我想在我的应用程序中接收那些广播。有哪些广播可用,我应该如何配置我的广播接收器? 我从Spotify应用程序本身中使用了设备广播状态开关,我很高兴该开关取消/激活了这些广播事件。 我现在遇到的问题是,这些信息似乎只是零星地发送。我接收playstatechanged事件(播放、暂停、下一个、上一个),但它

    • 问题内容: 给定带有transclude和隔离范围的指令(),当链接该指令时,我具有以下范围: 我期望: 如果同一指令具有 共享作用域 而不是 隔离作用域 ,则可以得到预期的结果。 这给我带来了一个问题,因为,如果被包含的内容包含另一个具有隔离范围的指令(),则会得到: 我想使用这样的指令: 但是,这并不工作,里面,是因为不上合适的范围。 我有两个问题: 如果指令具有隔离的作用域,为什么作用域不是

    • 微丝网应该可重复使用吗?对于可重用,我并不意味着共享特定于域的模型。 我的意思是,为一个应用程序创建的微服务是否应该在另一个应用程序中重用?如果它们可以在应用程序中重用,是否足够? 分离微服务的最佳方法是什么。从我的观点来看,一旦一个微服务调用另一微服务,它就会紧密耦合,这意味着它不容易(无需修改)被提取并放入另一个没有它所引用/来自的相同服务的微服务应用程序中。 在我看来,要使它们脱钩,有以下几

    • 本文向大家介绍Angularjs全局变量被作用域监听的正确姿势,包括了Angularjs全局变量被作用域监听的正确姿势的使用技巧和注意事项,需要的朋友参考一下 如果你只想知道结论: 马上就有人问为什么不是: 从我最近的一个bug来说说为什么要用第一种方式。 逻辑如图,一开始我使用了 $rootScope.$watch 的写法。因为 angularjs 在 $rootScope 上的 watch 一