oauth2.0 如何在Karate DSL中进行REST调用之前检索原始请求内容?[副本]

watbbzwu  于 2023-06-05  发布在  其他
关注(0)|答案(1)|浏览(145)

此问题已在此处有答案

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和签名者文档,但找不到任何解决方案

busg9geu

busg9geu1#

你可以看看ExecutionHook是否给了你一个方法,否则这可能是一个功能请求:https://stackoverflow.com/a/59080128/143475
我们现在实际上正在对代码进行重构--我同意这个用例很重要,所以我们可以考虑它。
编辑:这是现在可能在空手道,参考:https://stackoverflow.com/a/65019538/143475https://github.com/karatelabs/karate/issues/1385

相关问题