Как вызвать почтовый API, защищенный токеном CSRF, в уверенности? - PullRequest
0 голосов
/ 07 ноября 2019

Мне нужно вызвать API сообщения с помощью Rest-assured, который использует

   X-XSRF Token in the header 
    XSRF-TOKEN and JSESSIONID in the cookie

Для этой операции в Почтальоне я выполняю следующие шаги

  1. Получите страницу входа (Метод: Get)
  2. Теперь нажмите API входа / аутентификации (метод: POST) (Если не указано выше, 2 шага, я дважды вызываю сам API аутентификации) a.) При первом вызове API аутентификации я получаюниже ошибка Ошибка: не удалось проверить предоставленный токен CSRF, так как ваш сеанс не был найден. б.) Второй раз, когда я называю это, будет успешным
  3. Теперь нажмите Post API, чтобы создать запись

Я должен автоматизировать этот поток с помощью Rest Assured, и ниже мой код

Ниже приведены две проблемы. Пожалуйста, помогите мне исправить это

  1. когда я нажимаю метод get для входа в систему, не генерируется страница sessionID, которую мне нужно разместитьв файле cookie JSESSIONID

  2. API входа / аутентификации вызывается дважды, (я использую аутентификацию формы)

открытый класс Login {

SessionFilter sessionFilter = new SessionFilter();

private class SessionData
{
    private String csrf;
    private String session;
    public SessionData(String header, String sessionId){this.csrf = header;this.session = sessionId;}        
    public String getCsrf(){return csrf;}       
    public String getSessionId(){return session;}

}


protected SessionData login(String username, String password) {


    Response getLoginPage =
        given().log().all().
            filter(sessionFilter).
        when().
            get("/").
        then().log().all().
            extract().response();

        String loginPage_csrf = getLoginPage.getCookies().get("XSRF-TOKEN");

        System.out.println("1st response end get login page :" + loginPage_csrf );

    Response login_cred =
       given().log().all().
            auth().form(username,password,new FormAuthConfig("/api/authentication", "j_username", "j_password").withLoggingEnabled()).
            header("X-XSRF-TOKEN",loginPage_csrf).
            filter(sessionFilter).
        when().
            post("/api/authentication").
       then().log().all().
           extract().response();

    String Loggedin_csrf = login_cred.getCookies().get("XSRF-TOKEN");

    System.out.println("2nd response authentication :" + Loggedin_csrf );


    return new SessionData(Loggedin_csrf, sessionFilter.getSessionId());
}


@Test
public void create_role() throws IOException
{
    RestAssured.baseURI = "https://apitest.com";
    SessionData sessionData = login("admin", "admin");

    final Response response =
            (Response) given().log().all().
                contentType("application/json; charset=UTF-16").
                header("X-XSRF-TOKEN", sessionData.getCsrf()).
                filter(sessionFilter).
                body(getString("JSON Files/Roles_Section/CreateRole.JSON")).
            when().
                post("/api/authority").then().log().all();

    response.body().prettyPrint();

    Assert.assertEquals(response.getStatusCode(),HttpStatus.SC_ACCEPTED);
}

// read Payload from JSON file
public String getString(String path) throws IOException {return new String(Files.readAllBytes(Paths.get(path)));}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...