Имитация получения кода авторизации с помощью консольного приложения Java (Spring oauth authorization server) - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть сервер авторизации Spring oauth с включенной функцией csrf.Клиенты будут следовать пути кода авторизации с помощью единого входа - я захожу на свой сайт, нажимаю «Войти», перенаправляю на страницу авторизации, авторизируюсь и затем возвращаюсь.

Я моделирую процесс, через который клиенты будут проходить через браузер, используя java-приложение через консоль.Это требование.В будущем нам понадобится этот код для микросервисов в нашей архитектуре.

Всякий раз, когда я пытаюсь вызвать конечную точку авторизации сервера авторизации, я получаю исключение 403 токена CSRF (см. Ниже).Это ожидается в моем уме.Тогда возникает вопрос: как мне получить токен, вставить заголовок запроса и получить этот код доступа?

Мой текущий код:

private final String clientId = "my_client_id";
private final String authorizeUrl = "http://localhost:8085/oauth/authorize";
private final String callbackURL = "";

private String getUserAuthorizationURL() {
    return authorizeUrl + "?" + "response_type=code&" + "client_id=" + clientId + "&" + "redirect_uri="
            + callbackURL + "&" + "scope=openid";
}

public void getAuthorizationCode() {

    String content = "";

    HttpPost post = null;
    CloseableHttpClient httpclient = null;
    CloseableHttpResponse response = null;
    BufferedReader reader = null;

    try {
        post = new HttpPost(getUserAuthorizationURL());
        // pretty sure I need to add csrf token to post header here, but I dont know how to get it
        httpclient = HttpClients.createDefault();
        response = httpclient.execute(post);

        String line = null;
        HttpEntity entity = response.getEntity();
        reader = new BufferedReader(new InputStreamReader(entity.getContent())); 

        while ((line = reader.readLine()) != null) {
            content += line;
        }

        EntityUtils.consume(entity);
        System.out.println(content);
    } 
    catch (Exception ex) {
        ex.printStackTrace();
    }
}

Ответ JSON:

{"timestamp": 12345, "status": 403, "error": "Forbidden", "message": "Не удалось проверить предоставленный токен CSRF, поскольку сеанс не найден.", "Path":" / oauth / authorize "}

Нужно ли сделать первоначальный вызов серверу, получить токен csrf из этого вызова?Как это работает, если я использую приложение Java, в которое не встроен сеанс?Даже когда я пытаюсь сделать первоначальный вызов, я получаю исключение, что мы должны пройти полную аутентификацию для доступа http://localhost:8085/login.

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