Проверка JWT в бэкэнде Springboot - PullRequest
0 голосов
/ 14 марта 2019

Я ищу создание углового приложения, которое подключается к новому серверу аутентификации, созданному в Springboot, и возвращает jwt.

Идея состоит в том, чтобы создать приложение, которое сможет генерировать и подписывать токен jwt с помощью закрытого ключа на основе имени пользователя / пароля, указанного на экране. Сервер аутентификации будет проверять информацию для входа в базу данных и генерировать токен jwt. .

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

Я смотрю повсюду, и я не могу найти ключ к проверке токена. Я нашел этот кусок кода, но по какой-то причине, когда я выполняю оставшийся API, этот код не выполняется:

@Bean
    public JwtAccessTokenConverter accessTokenConverter() {
        JwtAccessTokenConverter converter = new JwtAccessTokenConverter();


        Resource resource = new ClassPathResource("public.txt");
        String publicKey = null;

        try {
            publicKey = IOUtils.toString(resource.getInputStream(), Charset.defaultCharset());
        } catch (final IOException e) {
            throw new RuntimeException(e);
        }
        converter.setVerifierKey(publicKey);
        return converter;
    }

Имеет ли смысл то, что я пытаюсь сделать?

Спасибо Привет

1 Ответ

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

Ваш сервер аутентификации должен быть единственным поставщиком JWT для ваших микросервисов.Поэтому, когда пользователь входит в систему и успешно проходит аутентификацию, ваш сервер аутентификации выдаст JWT, подписанный с помощью закрытого ключа (подпись ДОЛЖНА быть асимметричной - пример RS256), который вы держите только на сервере аутентификации;не передавайте этот закрытый ключ другим микросервисам, для которых вы хотите проверить JWT внутри.Что вы можете сделать, это получить открытый ключ на основе закрытого ключа, которым вы подписываете свои токены, и опубликовать его в конечной точке на вашем сервере аутентификации, которая не требует аутентификации - открытый ключ будет представлен в виде JWK (см. ссылку на спецификацию ).Google делает нечто подобное здесь .Затем в каждом из ваших микросервисов вам потребуется разработать способ отправки GET-запроса к конечной точке открытого ключа на вашем сервере аутентификации каждые X минут и кэшировать открытый ключ в каждом микросервисе.

Затем, когда запрос поступает на одно из ваших микросервисов, вы берете JWT, проверяете его действительность и предоставляете доступ / авторизацию, если токен действителен.Прелесть использования пары секретный / открытый ключ и асимметричной подписи ключей заключается в том, что вы можете проверять токен только на основе открытого ключа, но не подписывать его.Таким образом, до тех пор, пока у каждой службы есть открытый ключ от вашей конечной точки / сертификата, они могут проверять токен, не обращаясь к серверу аутентификации и не зная секретного ключа.

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

Я предлагаю использовать эту библиотеку для проверки JWT.

Общая архитектура будет выглядеть примерно так: enter image description here

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