Я создал REST-приложение Java Spring-Boot с Angular 6 на лицевой стороне.Некоторое время я пытаюсь подключить свое приложение с предварительной аутентификацией (Kerberos), читая поля из сеанса.
@GetMapping("/authenticate-by-current-session")
@Timed
public ResponseEntity<JWTToken> isAuthenticatedByCurrentSession(HttpServletRequest request) {
HttpHeaders httpHeaders = new HttpHeaders();
if (Objects.nonNull(request.getHeader(JWTFilter.SERVER_USER_X))) {
String login = request.getHeader(JWTFilter.SERVER_USER_X);
UserDetails userDetails = this.domainUserDetailsService.loadUserByUsername(login);
if (Objects.nonNull(userDetails)) {
UsernamePasswordAuthenticationToken authentication =
new UsernamePasswordAuthenticationToken(
userDetails.getUsername(),
userDetails.getPassword(),
userDetails.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(authentication);
boolean rememberMe = true;
String jwt = tokenProvider.createToken(authentication, rememberMe);
httpHeaders.add(JWTFilter.AUTHORIZATION_HEADER, "Bearer " + jwt);
saveTokenToDB(jwt, rememberMe, userDetails.getUsername());
return new ResponseEntity<>(new JWTToken(jwt), httpHeaders, HttpStatus.OK);
} else {
System.out.println("Cannot find user " + login + " in the DB");
return new ResponseEntity<>(new JWTToken(""), httpHeaders, HttpStatus.OK);
}
} else {
httpHeaders.add("Error", "undefined request principal - no session");
}
return new ResponseEntity<>(new JWTToken(""), httpHeaders, HttpStatus.OK);
}
Аутентификация работает правильно, но иногда возникает проблема с Google Chrome.Это вызвано двумя (иногда 3) панелями входа Kerberos.В Mozilla Firefox, Microsoft Edge есть только одна панель входа в систему.
Я заметил, что если при получении запроса статус ответа равен 401, то появляется панель входа.Похоже, что Kerberos теряет свой сеанс.
Мне нужно добавить одну вещь - в моем приложении есть две модели аутентификации: - аутентификация пароля пользователя - предварительная аутентификация Kerberos (если пользователь находится в сеансе)
Была ли у кого-нибудь подобная проблема?