Аутентификация формы Rest-Assured не работает

Я пытаюсь использовать rest-assured для одного из моих приложений, проблема в том, что я не могу пройти аутентификацию.

Ниже приведен код, который я пытаюсь

baseURI = "http://localhost:8080/api";
given()
        .auth().form("admin", "admin", new FormAuthConfig("/authentication/", "j_username", "j_password"))
.when()
        .get("/formAuth")
        .then()
        .log().all()
        .statusCode(200);

Я также пробовал следующие варианты, ничего не получается Ошибка 401 для следующего и выше кода

form("admin", "admin", new FormAuthConfig("/", "j_username", "j_password"))

следующая опция не работает, показывает Не удалось разобрать страницу входа. Проверьте наличие ошибок на странице входа или укажите FormAuthConfig. ошибка

.auth().form("admin", "admin", formAuthConfig().withAutoDetectionOfCsrf())

Ниже приведен код формы

<form class="form ng-pristine ng-valid" role="form" ng-submit="login($event)">
                <div class="form-group">
                    <label for="username" translate="global.form.username" class="ng-scope">Login</label>
                    <input type="text" class="form-control ng-pristine ng-valid ng-touched" id="username" placeholder="Your login" ng-model="username" autocomplete="off">
                </div>
                <div class="form-group">
                    <label for="password" translate="login.form.password" class="ng-scope">Password</label>
                    <input type="password" class="form-control ng-pristine ng-untouched ng-valid" id="password" placeholder="Your password" ng-model="password">
                </div>
                <div class="form-group">
                    <label for="rememberMe">
                        <input type="checkbox" id="rememberMe" ng-model="rememberMe" checked="" class="ng-pristine ng-untouched ng-valid">
                        <span translate="login.form.rememberme" class="ng-scope">Automatic Login</span>
                    </label>
                </div>
                <button type="submit" class="btn btn-primary ng-scope" translate="login.form.button">Authenticate</button>
            </form>

Ниже приведен вывод снимков с использованием PostMan.

URL: http://localhost:8080/api/authentication?cacheBuster=1485280599118
parameter:  j_username:admin
j_password:admin

person Gaurang    schedule 24.01.2017    source источник
comment
почему имена начинаются с «j_», если у вас есть поля без него?   -  person freakman    schedule 09.07.2020


Ответы (2)


Что-то кажется сломанным в v3. У меня была такая же проблема сегодня при переходе с com.jayway.restassured 2.8.0 на io.restassured 3.0.5. Я только что откатил обновление, и оно снова заработало :/

person ch4mp    schedule 24.10.2017

Я считаю, что вам необходимо предоставить дополнительную информацию о том, как выполняется вызов аутентификации.

Когда вы определили new FormAuthConfig("/authentication/", "j_username", "j_password"), вы сообщаете Rest Assured, что он должен сделать вызов POST к конечной точке /authentication, используя два последних параметра в качестве параметров формы.

Обычно элемент HTML <form> имеет атрибут action, указывающий конечную точку, к которой он будет отправлять запрос POST, а атрибут name в тегах <input> указывает ключи параметров формы, которые следует использовать.

В вашем случае форма HTML не предоставляет много информации о том, как выполняется вызов, поскольку он, вероятно, обрабатывается с помощью Javascript.

Кстати, просто примечание: часто бывает полезно включить ведение журнала при определении FormAuthConfig следующим образом:

given().auth()
  .form(
    "admin",
    "admin",
    new FormAuthConfig("/authentication", "j_username", "j_password")
      .withLoggingEnabled())
  // ...
person Gerardo Roza    schedule 14.04.2019