Дублирующая панель аутентификации Kerberos в Google Chrome - PullRequest
0 голосов
/ 01 июля 2019

Я создал 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 (если пользователь находится в сеансе)

Была ли у кого-нибудь подобная проблема?

...