генерировать токен jwt из пружинной загрузки для углового приложения - PullRequest
0 голосов
/ 14 апреля 2019

Моя проблема связана с аутентификацией на основе токенов jwt с пружинной загрузкой в ​​бэкэнде и угловым во внешнем интерфейсе, поэтому для этого я разработал два фильтра в своей конфигурации безопасности Spring: один для выдачи токенов, а другой для их проверки внутри фильтра.который выдает токены: запрос к конечной точке "/ login" будет содержать такие данные пользователя, как пароль и имя пользователя, поэтому фильтр может аутентифицировать пользователя и выдавать токен взамен, и это моя проблема, я не вижу другого способа разрешить аутентификациюдо тех пор, пока мы не доберемся до контроллера, где я должен сделать эту конкретную конечную точку.

@Override
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response)
            throws AuthenticationException {

try {

~~// 1. Get credentials from request
~~UserCredentials creds = new ~~ObjectMapper().readValue(request.getInputStream(), ~~UserCredentials.class);

// 2. Create auth object (contains credentials) which will be used by auth manager
~~UsernamePasswordAuthenticationToken authToken = new UsernamePasswordAuthenticationToken(creds.getUsername(),creds.getPassword(), Collections.emptyList());

// 3. Authentication manager authenticate the user, and use ~~UserDetialsServiceImpl::loadUserByUsername() method to load the user.
    return authManager.authenticate(authToken);

~~} catch (IOException e) {
~~~~~~throw new RuntimeException(e);
 }
}

Мои друзья, я хочу, чтобы вы посоветовали мне, хорошо ли то, что я уже делаю, и как лучше всего выполнитьчто внутри контроллера или непосредственно внутри фильтра?Спасибо (пожалуйста, прости мой английский)

ожидаемый результат:

@PostMapping("/login")
public void method(@RequestBody MyUser myUser){
// perform authentication and issue token for my front app
}

1 Ответ

0 голосов
/ 14 апреля 2019

Лучше, если вы будете следовать ниже.

1) ПРОБЛЕМА токена - это должно быть сделано после уровня фильтра, я имею в виду, что вы должны проверять все свои HTTP-запросы и данные (пароль и идентификатор пользователя) перед тем, как выпустить токен для этого пользователя, выполнение этой проверки на уровне фильтра противоречит правильные шаблоны дизайна.

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

...