>

내 질문은 주로 Spring 애플리케이션에서 동일한 사용자에게 별도의 인증 소스를 제공하는 두 가지 로그인 양식을 사용할 수 있는지 여부와 관련이 있습니다.

다른 보안 구성 클래스를 갖고 싶습니다 (또는 동일 함)UAT또는생산과 같이 선택한 프로필에 따라 Maven 빌드에 정적 내부 구성 클래스가있는 클래스 )가 추가되었습니다. 또는 배포 환경에서이를 제어하십시오 (프레임에 대해서는 아래 참조).

두 경우 모두응용 프로그램에 "관리자 페이지와 같은" "권한있는"액세스에 대한 자체 인증 프롬프트가 있어야하며 이에 대한 응용 프로그램의 로그인 페이지를보고 싶습니다.

그러나UAT프로필의 경우 보호 된 페이지 인 경우 사용자가 페이지를 볼 수 있기 전에 추가 로그인 페이지와 관리자 기능에 대한 로그인 페이지를보고 싶습니다 액세스합니다.

아이디어는제작에서와 동일하게UAT로 응용 프로그램을 표시하는 것이지만 사용자가 먼저 별도의 로그인으로 인증하지 않고도 페이지를 볼 수 없도록하는 것입니다. 양식.

저는어떤아이디어도 기꺼이 생각하지만, 이상적인 경우는 별도의 Spring Security 구성 세트로이를 허용하는 것입니다.

<시간>

내가 시도한 것/고려한 것

동적 필터 요청을 잡아서 다른 로그인 페이지를 표시하고 외부 인증 (빌드 타임에 포함 된 jar에 패키지 된 모든 외부 처리)을 처리하는 서블릿으로 전달하는 동적 필터를 등록 하여이 아이디어를 구현하는 데 운이 좋았습니다. UAT의 경우)이지만 스프링 앱이 아니기 때문에 디스패치 서블릿이 해당 접근법을 무효화 할 것이라고 생각합니다.

프레임 (앱 인식) 이론적으로 Spring Security 문제를 세분화하여 자체 보안을 갖는 외부 "UAT 뷰어"앱의 프레임 내에 앱을 표시하는 아이디어를 고려했습니다. 그러나 그것이 외부 및 내부 응용 프로그램에 대해 다른 쿠키를 생성하는지 여부는 알 수 없습니다 (보안상의 이유로 프레임을 거의 고려하지 않습니다). 클릭 재킹을 방지하기 위해 x-frame-options 헤더의 모든 프레임을 거부하는 것이 이상적이지만,이 방법이 가능하다면 프레임 정책을 동일 출처로 변경하기 만하면됩니다.

프레임 접근을 먼저 시도하고 다시보고하겠습니다.

이를 통해 프레임에 표시되는 내부 앱은 클라이언트가로드 할 수 있도록 외부 세계에 여전히 액세스 할 수 있어야하므로이 접근 방식은 내부 응용 프로그램을 최소한의 영향으로 격리하는 목적을 무너 뜨립니다. 코드입니다.

  • 답변 # 1

    이 솔루션은 일반적인 스프링 보안 흐름 외부에서 인증을 중단하고 처리 할 수있는 필터 및 서블릿을 제공하는 별도의 프로젝트 (Maven의 "UAT"프로파일 포함)에 대한 종속성을 추가하고 있습니다.

    이 접근법의 문제점은 스프링 보안의 필터가 먼저 요청을 가로 채서 페이지에 인증이 필요한 경우 지정된 로그인 페이지 (또는 기본값)로 리디렉션을 시도한다는 것입니다. 이 문제를 해결하는 방법은 스프링 보안을 비활성화하는 경로를 추가하는 것이므로 요청은 해당 필터를 무시하고 다음과 같이 사용자 정의 추가 필터로 처리합니다.

    @Override
    public void configure(WebSecurity web) throws Exception {
        // Disabling security for the login-aspect addon. Will emit 404 in
        // production operation where login-aspect.jar is no added.
        web.ignoring().antMatchers("/uat-login");
    }
    
    

    이러한 방식으로, 요청을 애플리케이션에 대한 요청을 먼저 '/ uat-login'에 매핑되고 인증 프롬프트를 표시하는 외부 인증 서블릿으로 리디렉션하는 필터를 가질 수 있습니다.

    이에 대한 추가 이점 (IMO)은 애플리케이션의 로그 아웃 기능이 트리거되고 세션 쿠키가 삭제되면 외부 보안에서도 효과적으로 로그 아웃된다는 것입니다.

    최상의 방법은 아니지만 효과가 있습니다 개선을위한 제안은 반드시 환영합니다. 나중에 Github 프로젝트에이 작업을 수행하는 데 사용 된 코드를 게시 할 것입니다.

관련 자료

  • 이전 MySQL 동시 업데이트
  • 다음 angular - kendo-chart-series의 kendo-chart-series-item-label에 템플릿을 추가하는 방법은 무엇입니까?