1

我们正在使用空手道框架自动化我们的测试。在我们的一项功能中,我们需要解码令牌并在响应中获取范围。一切正常,除了 js 中的这段代码。

function(token) {
    return JSON.parse(new Buffer(token.split('.')[1],'base64').toString('ascii')).scope;
}

错误:

Caused by: <eval>:2 ReferenceError: "Buffer" is not defined
Caused by: jdk.nashorn.internal.runtime.ECMAException

在官方教程中,据说 javascript 是空手道的“原生”,所以我们不明白为什么 Buffer 无法识别?我们应该怎么做?谢谢你的帮助

4

3 回答 3

2

我能够使用以下代码成功地将 JWT 令牌有效负载 base64Decode 为 JSON,而无需 Java 方法:

  Background:
    * def parseJwt =
  """
  function(token) {
      var base64Url = token.split('.')[1];
      var base64Str = base64Url.replace(/-/g, '+').replace(/_/g, '/');
      var Base64 = Java.type('java.util.Base64');
      var decoded = Base64.getDecoder().decode(base64Str);
      var String = Java.type('java.lang.String')
      return new String(decoded)
  };
  """

  Scenario: JWT Token
    Given path  'jwt/authenticate'
    And header x-goog-authenticated-user-email = 'email'
    And request {}
    When method get
    Then status 200
    * json result = parseJwt(responseHeaders['Set-Cookie'][0])
    * match result == {permissions: [1,2,3], iss: "us", exp: "#number", email: "email"}

注意:如果将字符串解析为 json 本身,它似乎确实需要使用,json而不是def像 Karate 那样做得更好。此外,如果是这样,您可以从标头而不是 cookie 中获取令牌,如果是这样,只需更改您正在寻找的 responseHeader。

于 2018-09-06T13:51:48.387 回答
1

我很确定这Buffer是高级/非标准或 NodeJS,因此 JVM JS 引擎(Nashorn)可能不支持它。

这是我的建议。对于这种情况,请使用 Java 实用程序来完成这项工作。

例如,查看文档中使用 Base64 编码的Karate basic-auth 示例。

如果它真的很复杂,只需创建一个 Java 静态函数,作为附带好处进行测试会容易得多。希望这可以帮助 !

于 2017-09-27T16:26:06.450 回答
-1

关于帖子空手道:使用不记名令牌的请求的问题 | 空手道在响应中显示“org/apache/commons/codec/binary/Base64”而不是 HTTP 401

我的查询被标记为重复,因此发布了我们在项目中找到的答案/解决方案。

We did some debugging in karate core about the error. It seemed a dependency was missing.

enter image description here

We added the dependency in the POM.xml

<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.15</version>
</dependency>

Afterwards the problem was resolved and we started getting HTTP 401. I am not sure it can be added to the karate core.

于 2021-06-29T14:42:09.043 回答