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

Amazon Lex授权Flutter

林子石
2023-03-14

我想写一个与Amazon Lex REST API一起工作的颤振应用程序。Amazon有特定的方法来验证我使用的SigV4包来生成所需的头文件

  Sigv4Client client = Sigv4Client(
  keyId: kAccessKey,
  accessKey: kSecretKey,
  region: "us-east-1",
  serviceName: "lex",
);

final request = client.request(
  "https://runtime.lex.us-east-1.amazonaws.com/bot/myBotName/alias/BETA/user/myUserId/text",
  method: 'POST',
  body: jsonEncode({'inputText': 'hi'}),
);

var response=post(request.url, headers: request.headers, body: request.body);
print(response.body);

但我得到的信息是:

{"message":"The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details."}

我得到有效的回复邮递员相同的数据,唯一的部分是不同的邮递员,这个包是X-Amz-Content-Sha256值,当然签名值(它每次都改变)。"X-Amz-Content-Sha256"邮递员值:

beaead3198f7da1e70d03ab969765e0821b24fc913697e929e726aeaebf0eba3

“X-Amz-Content-Sha256”我的代码值:

ee9ef87bd5a357cff93b1d83d1e8a1b47fb3fa2e94251711c6a30250119e6369

我试图编写函数来计算验证字符串,但它对我来说太复杂了。

共有2个答案

巫马自明
2023-03-14

我也有类似的问题。我设置defaultContentType:'应用程序/json; charset=utf-8'在AwsSigV4Client和删除标头从SigV4Request:

AwsSigV4Client client=AwsSigV4Client(
  accessKey,
  secretKey,
  'https://runtime.lex.eu-west-2.amazonaws.com',
  region: 'eu-west-2',
  serviceName: 'lex',
  defaultContentType: 'application/json; charset=utf-8',
);

final signedRequest = new SigV4Request(
  client,
  method: 'POST',
  path: '/bot/MyBotName/alias/BETA/user/MyUser/text',
  body: new Map<String, dynamic>.from({"inputText": "hi"}),
);
钮边浩
2023-03-14

我更改了包并使用了amazon-cognito-identity-dart-2

并按如下方式发送请求:

AwsSigV4Client client=AwsSigV4Client(
      kAccessKey,
      kSecretKey,
      'https://runtime.lex.us-east-1.amazonaws.com',
      region: 'us-east-1',
      serviceName: 'lex',
    );

final signedRequest = new SigV4Request(
      client,
      method: 'POST',
      path: '/bot/MyBotName/alias/BETA/user/MyUser/text',
      headers: new Map<String, String>.from({
        'Content-Type': 'application/json; charset=utf-8',
        'ACCEPT': 'application/json',
      }),
      body: new Map<String, dynamic>.from({"inputText": "hi"}),
    );

var response = await http.post(
      signedRequest.url,
      headers: signedRequest.headers,
      body: signedRequest.body,
    );

补充一点非常重要

'Content-Type': 'application/json; charset=utf-8',

在标题中。

 类似资料:
  • 我想更好地理解隐式授权流和授权代码授权流之间的区别,因为我不确定我目前的理解是否正确。 隐式授权流主要由前端应用程序用于验证用户身份吗? 隐式授权流是否只需要一个client_id、用户名和密码来进行身份验证,换句话说,永远不会发送client_secret? 授权码只是一个短期令牌吗? 将授权码交换为访问令牌后,客户端可以访问用户帐户多长时间?具体地说,如果客户端是一个长时间运行的脚本,那么用户

  • 授权是指验证用户是否允许做某件事的过程。Yii提供两种授权方法: 存取控制过滤器(ACF)和基于角色的存取控制(RBAC)。 存取控制过滤器 存取控制过滤器(ACF)是一种通过 yii\filters\AccessControl 类来实现的简单授权方法, 非常适用于仅需要简单的存取控制的应用。正如其名称所指,ACF 是一种动作过滤器 filter,可在控制器或者模块中使用。当一个用户请求一个动作时

  • 可能是NAS不支持返回的AVP以限制带宽。 AVP的单位也可能不匹配。例如,计数器期望值为Kbit / s而不是bit / s。 为了提高速度,应使用Perl代替Bash。如果你使用perl模块,当FreeRADIUS启动时,Perl解释器和Perl脚本将被加载到内存中。 FreeRADIUS内部使用的其他属性应在字典文件中定义,该文件位于FreeRADIUS配置目录下。 内部属性列表称为控制列表

  • 本书以 署名-非商业性使用-相同方式共享 发布 您可以自由: 复制、发行、展览、表演、放映、广播或通过信息网络传播本作品 创作演绎作品 惟须遵守下列条件: 署名 您必须按照作者或者许可人指定的方式对作品进行署名。 非商业性使用 您不得将本作品用于商业目的。 相同方式共享 如果您改变、转换本作品或者以本作品为基础进行创作,您只能采用与本协议相同的许可协议发布基于本作品的演绎作品。 对任何再使用或者发

  • The MIT License Copyright (c) 2010 - 2011 Fuel Development Team Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "S

  • 概述 IoT系统使用OAtuh2协议进行接入与授权操作。原生的OAuth2支持Authenticatoin Code,Password,Client Credentials,Implicit四种授权模式。IoT系统扩展了OAuth2协议,以支持更多的接入方式,如基于微信登录的js_code模式,基于短信或邮件验证码的captcha模式。具体来讲,IoT系统支持以下授权模式: Js Code 适用于

  • 问题内容: 如果要在Apache ActiveMQ上实现JAAS授权,是否必须使用activemq.xml配置文件中的插件? 这种方式确实不好,因为如果要更改授权,则必须更改activemq.xml文件并 重新启动 服务器才能正常工作。 是否可以通过更改其他属性文件而不是activemq.xml文件来使用类似JAAS身份验证的方法?还是可以自定义我自己的授权插件? 谢谢。 问题答案: 每当我设置A

  • 验证授权 取得用户同意后,部分需要开通权限的接口才能使用。若仍有部分接口不能使用,请检查自己应用权限包是否包含接口。 /** * @param options 参数,支持boolean型 function 或object 或者不传第1个参数 直接为function表示不强制授权 * @param [options.refresh=false] 是否重新授权 true: 即使已经有授权,会清掉之前的