Лучший способ реализовать аутентификацию в микросервисной архитектуре с помощью vert.x - PullRequest
0 голосов
/ 29 ноября 2018

Кто-то имеет представление о том, как реализовать процесс аутентификации и авторизации в микросервисной архитектуре vert.x через службу шлюза API и автономную службу пользователя, где у него есть собственный пользовательский поставщик аутентификации?Должно ли оно использовать общие данные (карта Hazelcast) для хранения некоторой пользовательской информации, такой как имя, роли по токену или что-то еще?Я схожу с ума ..

Ответы [ 2 ]

0 голосов
/ 02 декабря 2018

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

jdbcAuth.rxAuthenticate(authInfo)
            .map(user -> user.principal().getString("username"))
            .flatMap(username -> roleRepository.findByUsername(username).map(roles -> {
                JWTOptions jwtOptions = new JWTOptions().setAlgorithm("RS256");
                roles.forEach(jwtOptions::addPermission);
                LOGGER.info("Token successfully created");
                String token = jwtAuth.generateToken(new JsonObject().put("username", username), jwtOptions);
                return new JsonObject().put("accessToken", token).put("tokenType", "Bearer");
            }))
            .subscribe(SingleHelper.toObserver(handler));
  1. Для аутентификации пользователя я использую JDBCAuth (и генерацию хеша solt для создания нового пользователя)
  2. Если есть такой пользователь, мы получаемролями, сгенерируйте токен с необязательными утверждениями, такими как «имя пользователя» и JWTOptions с разрешениями.
  3. Включение в заголовок запроса.JWTAuth-обработчик с pulicKey подобен:
    JWTAuthHandler.create(JWTAuth.create(vertx.getDelegate(), new JWTAuthOptions().addPubSecKey(new PubSecKeyOptions()
            .setAlgorithm("RS256")
            .setPublicKey(<PUBLIC_KEY>))));
    
  4. Этот обработчик устанавливает пользователя в контекст, и мы можем получить его через context.user () и проверить разрешения.Кстати, мы можем поместить этот обработчик вместе с методом addAuthority () в маршрут для проверки доступа.

0 голосов
/ 01 декабря 2018

Как часть архитектуры микросервисов, я бы не реализовал аутентификацию непосредственно в своем микросервисе vert.x, но я бы использовал шлюз управления API, такой как tyk или kong например.

Тогда я бы только проверял разрешения пользователя на данные в моем микросервисе, используя любую базу данных, которую вы хотите.

Вы также можете копать эту дорожку если вы действительно хотите обрабатывать аутентификацию прямо в вашем микросервисе.

...