Spring: заполнить форму OAuth2, не открывая браузер - PullRequest
0 голосов
/ 24 марта 2019

У меня приложение OAuth2. Чтобы протестировать бэкэнд-сервис, я бы хотел, чтобы тестовый пользователь входил программно и затем запрашивал API, подтверждая ответ.

Другими словами, я пытаюсь сделать следующее (apache http), но с помощью Spring:

    HttpPost httpPost = new HttpPost(
            "https://foo/authsvc?PolicyId=urn:bar:security:authentication:asf:nidlogin&Target=https://foo/mga/sps/auth");
    java.util.List<NameValuePair> nvps = new ArrayList<NameValuePair>();
    nvps.add(new BasicNameValuePair("username", "john"));
    nvps.add(new BasicNameValuePair("password", "doe"));
    nvps.add(new BasicNameValuePair("operation", "verify"));

    httpPost.setEntity(new UrlEncodedFormEntity(nvps));

    response = httpClient.execute(httpPost);

Вопрос

Как это можно сделать с помощью Spring?

EDIT

Я не хочу издеваться над аутентификацией OAUth.

После OAuth некоторые учетные записи должны быть выбраны программно (флажок), а также нажав кнопку «Отправить», это все еще без открытия браузера.

1 Ответ

0 голосов
/ 24 марта 2019

Вы можете использовать поток паролей для тестирования.Этот поток не требует браузера.См .: OAuth RFC .

Пример:

 POST /token HTTP/1.1
 Host: server.example.com
 Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
 Content-Type: application/x-www-form-urlencoded

 grant_type=password&username=johndoe&password=A3ddj3w

Редактировать:

Если вы хотите проверить поток входа в систему, вы можете использовать MockMvc.(https://spring.io/guides/gs/testing-web)

Пример:

@Before
public final void init() {
    mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext)
            .apply(SecurityMockMvcConfigurers.springSecurity())
            .build();
}

@Test
public void test() throws Exception {
    ...

    MvcResult result = mockMvc.perform(
            post("/login")
                    .content(...)
            )
            .andExpect(status().isOk())
            .andReturn();

    MockHttpServletResponse response = result.getResponse();

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