【发布时间】: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