【问题标题】:RestAssured and Bearer tokenRestAssured 和 Bearer 令牌
【发布时间】:2020-06-23 11:25:35
【问题描述】:

对 RestAssured 和一般身份验证非常陌生。

我有一个 API,我可以使用客户端凭据在 Postman 中发出获取请求。它返回一个不记名令牌。

我现在正试图让它与黄瓜一起使用并放心。

所以我们有这段代码,它试图为下一步的 API 调用获取不记名令牌。

@Given("^the user has a valid authentication token for credentials$")
public void the_user_with_credentials_something_and_something_has_a_valid_authentication_token() throws Throwable {
    
        RestAssured.baseURI=SCN_CONTEXT.getProp().getExternalUri();
        Response accessTokenResponse = given()
                 .header("Content-Type", "application/json")
                 .queryParams("client_id", SCN_CONTEXT.getProp().getClientId())
                 .queryParams("client_secret", SCN_CONTEXT.getProp().getClientSecret())
                 .when().log().all().get(APIResources.valueOf("oAuthAPI").getValue());
         
         System.out.println(accessTokenResponse.getStatusCode());
         SCN_CONTEXT.get_SCN().write("accessTokenResponse: " + accessTokenResponse.getStatusCode());

          JsonPath js=new io.restassured.path.json.JsonPath(accessTokenResponse.body().asString());
            id_token="Bearer " + js.getString("id_token");
            SCN_CONTEXT.setId_token(id_token);
            SCN_CONTEXT._SCN.write("Authentication Token is: " + id_token);
            
    }

使用的externalUri是我在Postman中使用的令牌访问uri。

但是这样做我得到一个 403 并且令牌为空

控制台日志:(带有 ? 的任何内容都已删除)

Request method: GET
Request URI:    https://?.com/?/v1/?/oauth/token?client_id=?&client_secret=?
Proxy:          <none>
Request params: <none>
Query params:   client_id=?
                client_secret=?
Form params:    <none>
Path params:    <none>
Headers:        Accept=*/*
                Content-Type=application/json; charset=UTF-8
Cookies:        <none>
Multiparts:     <none>
Body:           <none>
403

【问题讨论】:

  • HTTP 403 是一个 HTTP 状态码,表示禁止访问请求的资源,在given() 后添加.log().all() 并比较来自 POSTMAN 和 Rest Assured 的请求详细信息,检查是否有任何差异.还要在这里发布完整的控制台日志以供进一步调试
  • 我混淆了客户端 ID 和密码,哪里是查找邮递员请求详细信息的最佳位置?不确定为什么没有获取详细信息:S
  • 大声笑,这是故意的,所以你的意思是说代替?,你看到了所有细节,但你得到了403
  • 是的,这是故意的,我看到了正确的细节并得到了 403
  • 您可以拨入我的 WebEx 吗?如果我可以看看它,我可以帮助你快速解决它

标签: java oauth rest-assured


【解决方案1】:

这里有很多东西要看,对于类似的要求,我在 POSTMAN 控制台中有以下内容。看起来这可能是一个GET 电话,但从技术上讲这是一个POST 电话

授权为Base64编码,作为标头发送,查询参数为grant_typescope

对此的放心代码将是

given().header("Content-Type", "application/x-www-form-urlencoded").auth().preemptive()
        .basic("abc", "def")
        .queryParam("grant_type", "client_credentials").queryParam("scope", "123").when()
        .post("ghi").then().extract().response();

【讨论】:

    猜你喜欢
    • 2016-03-23
    • 2019-02-18
    • 2021-07-10
    • 2018-12-16
    • 1970-01-01
    • 2019-04-11
    • 2018-05-12
    • 2018-05-26
    • 1970-01-01
    相关资源
    最近更新 更多