Имея пользовательский сервис, я хотел, чтобы через него выполнялись все операции аутентификации и авторизации.В конце концов я сделал это:
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));
- Для аутентификации пользователя я использую JDBCAuth (и генерацию хеша solt для создания нового пользователя)
- Если есть такой пользователь, мы получаемролями, сгенерируйте токен с необязательными утверждениями, такими как «имя пользователя» и JWTOptions с разрешениями.
- Включение в заголовок запроса.JWTAuth-обработчик с pulicKey подобен:
JWTAuthHandler.create(JWTAuth.create(vertx.getDelegate(), new JWTAuthOptions().addPubSecKey(new PubSecKeyOptions()
.setAlgorithm("RS256")
.setPublicKey(<PUBLIC_KEY>))));
Этот обработчик устанавливает пользователя в контекст, и мы можем получить его через context.user () и проверить разрешения.Кстати, мы можем поместить этот обработчик вместе с методом addAuthority () в маршрут для проверки доступа.