执行任何请求时,我需要使用正文POST
的{{1}}请求执行身份验证,
标题{username:"somename", password:"somepass"}
,它为我提供了生成令牌的响应,我需要将其粘贴为第二个标题,如同Content-Type:application.json
一样,以便进一步请求。
请帮帮我吧。
答案 0 :(得分:1)
对我有用的变体:
String token = given()
.contentType("application/json")
.body(new User("someuser" , "123"))
.when()
.post(RestConfig.baseUrl+"/authentication-url")
.then().extract().response().as(TokenResponse.class).getToken();
given()
.contentType("application/json")
.header("Authorization", token)
.get(RestConfig.baseUrl+"/some-path")
.then()
.statusCode(200)...
答案 1 :(得分:0)
我有类似的要求,我必须来回传递身份验证令牌,但这是春季休息模板不放心。为此,我使用了客户端过滤器,它在响应时捕获了令牌,并在请求时将其设置为标头。你可以搜索是否有类似的东西放心,哪些可以完成这项工作。 以下是一个示例https://github.com/rest-assured/rest-assured/wiki/Usage
自定义身份验证
Rest Assured允许您创建自定义身份验证提供程序。您可以通过实现io.restassured.spi.AuthFilter接口(最好)并将其作为过滤器应用。例如,假设你的安全性包括在一个名为“AUTH”的新标题中将两个标题组合在一起(这当然不安全)。然后你就可以这样做(Java 8语法):
given().
filter((requestSpec, responseSpec, ctx) -> {
String header1 = requestSpec.getHeaders().getValue("header1");
String header2 = requestSpec.getHeaders().getValue("header2");
requestSpec.header("AUTH", header1 + header2);
return ctx.next(requestSpec, responseSpec);
}).
when().
get("/customAuth").
then().
statusCode(200);
您想要使用AuthFilter而非Filter的原因是在执行given()。auth()。none()时会自动删除AuthFilters。 ...
答案 2 :(得分:0)
我可能误解了这个问题,但是从我得到的问题来看,我认为这样的事情应该有效:
String token =
given().
header("Content-Type", "application/json").
body(/* body content goes here */).
when().
post(/* route goes here */).
then().
extract().path("token").toString()
// the above path arg depends on the response you get from the call.
然后下一个电话会是:
given().
header("Content-Type", "application/json").
header("Authorization", token).
when()...etc.
某些细节将取决于API,但我一直使用此格式。经常获得用户ID或令牌等的响应,并将其用于将来的呼叫。
有关在保证文档中提取的更多信息:https://github.com/rest-assured/rest-assured/wiki/Usage#extracting-values-from-the-response-after-validation