我怎样才能在使用REST API休息授权令牌放心? 可能吗?(How can I get aut

2019-09-26 06:58发布

目前使用的邮差我要做的POST请求API_URL /登录和我通过用户名和密码,作为回报,我得到令牌见下图:

例如要求:

/login
POST
Body
{
    "username": "admin",
    "password": "admin"
}
Return
{
    "token": "1234-56789-..."
}

你能告诉我,我会怎么做。我用.parameters尝试,但它说,弃用...

Answer 1:

你必须知道的模式是响应什么。 例如,如果输出是像这样的:

{
    "success": true,
    "authorization_token": "eyJ0eXAiOiJCZWFy...",
    "refresh_token": "eyJ0eXAiOiJCZWFyZ...",
    "type": "Bearer",

    ...
}

了解架构,可以提取整个输出,并通过其解析,像这样的:

import io.restassured.response.Response;

Response response =  
        RestAssured.given().
            header("Content-Type", "application/json").
            body(loginPayload).
        when().
            post("/login").
        then().
            log().ifError().
            statusCode(200).
            contentType("application/vnd.api+json").
            body("$", hasKey("authorization_token")).                                   //authorization_token is present in the response
            body("any { it.key == 'authorization_token' }", is(notNullValue())).        //authorization_token value is not null - has a value
        extract().response();

然后,身份验证令牌可以设置为一个字符串变量

String auth_token = response.path("authorization_token").toString();

提取物()响应(); 返回整个效应初探,但你可以改变这种提取()。路径(“authorization_token”)只是一个字符串



Answer 2:

放心支持Java对象/ JSON从映射。 你只需要一个JSON解析器,如在classpath杰克逊或GSON。

首先定义一个类来表示用户凭证:

class Credentials {

    private String username;
    private String password;

    // Getters and setters
}

然后定义类来表示身份验证令牌:

class AuthenticationToken {

    private String token;

    // Getters and setters
}

最后进行交换的令牌凭据要求:

@Test
public void authenticate() {

    Credentials credentials = new Credentials();
    credentials.setUsername("admin");
    credentials.setPassword("password");

    AuthenticationToken authenticationToken =

        given()
            .accept("application/json")
            .contentType("application/json")
            .body(credentials)
        .expect()
            .statusCode(200)
        .when()
            .post("/login")
        .then()
            .log().all()
            .extract()
                .body().as(AuthenticationToken.class);

    assertNotNull(authenticationToken.getToken());
}


文章来源: How can I get authorization token in rest API using rest assured? Is it possible?
标签: rest token