此问题已在此处有答案:
How to handle requests with signatures on karate tests?(1个答案)
两年前关闭。
我基本上是试图生成AWS签名,以便使用它们进行授权。我们有第三方java库(uk.co.lucasweb.aws.v4.signer)来生成此AWS签名。使用JavaInterop的概念,我将能够调用它们并检索签名。但是我必须在参数中传递所有请求细节(url,header,param),以便生成它。(getSignature()是一个使用指定库编写的自定义Java方法)
getSignature()方法的实现看起来像这样
String contentSha256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855";
HttpRequest request = new HttpRequest("GET", new URI(URL));
String signature = Signer.builder()
.awsCredentials(new AwsCredentials(ACCESS_KEY, SECRET_KEY))
.header("Host", "examplebucket.s3.amazonaws.com")
.header("x-amz-date", "20130524T000000Z")
.header("x-amz-content-sha256", contentSha256)
.buildS3(request, contentSha256)
.getSignature();
空手道DSL:
* def awsUtils = Java.type('customJavaClasses.AWSUtils')
* url 'https://sit.ecom.com/atp-config-entity-dev'
场景:获取AWS签名
Given path '/v1/atp-config-entity/config'
And header wtr-correlation-id = '58f3de9b-6276-4f05-a78d-0a39c6044877'
And header customer-id = '279809907'
And header principal-id = '279809906'
And header X-Amz-Date = '20200325T120000Z'
And def requestPayload = read('request.json')
And request requestPayload
使用KarateDSL编写请求后,我需要一种检索内容的方法,以便可以在参数中传递它们,如下所示
And def signature = awsUtils.getSignature(url, headers, params);
And header Authorization = signature
When method post
Then status 200
我知道我们有一个规定,在使用karate.prevRequest进行呼叫后可以这样做。但是,在调用之前,我们是否有任何规定来检索原始请求数据。我也参考了oAuth2和签名者文档,但找不到任何解决方案
1条答案
按热度按时间busg9geu1#
你可以看看
ExecutionHook
是否给了你一个方法,否则这可能是一个功能请求:https://stackoverflow.com/a/59080128/143475我们现在实际上正在对代码进行重构--我同意这个用例很重要,所以我们可以考虑它。
编辑:这是现在可能在空手道,参考:https://stackoverflow.com/a/65019538/143475和https://github.com/karatelabs/karate/issues/1385