내 질문은 주로 Spring 애플리케이션에서 동일한 사용자에게 별도의 인증 소스를 제공하는 두 가지 로그인 양식을 사용할 수 있는지 여부와 관련이 있습니다.
다른 보안 구성 클래스를 갖고 싶습니다 (또는 동일 함)UAT또는생산과 같이 선택한 프로필에 따라 Maven 빌드에 정적 내부 구성 클래스가있는 클래스 )가 추가되었습니다. 또는 배포 환경에서이를 제어하십시오 (프레임에 대해서는 아래 참조).
두 경우 모두응용 프로그램에 "관리자 페이지와 같은" "권한있는"액세스에 대한 자체 인증 프롬프트가 있어야하며 이에 대한 응용 프로그램의 로그인 페이지를보고 싶습니다.
그러나UAT프로필의 경우 보호 된 페이지 인 경우 사용자가 페이지를 볼 수 있기 전에 추가 로그인 페이지와 관리자 기능에 대한 로그인 페이지를보고 싶습니다 액세스합니다.
아이디어는제작에서와 동일하게UAT로 응용 프로그램을 표시하는 것이지만 사용자가 먼저 별도의 로그인으로 인증하지 않고도 페이지를 볼 수 없도록하는 것입니다. 양식.
저는어떤아이디어도 기꺼이 생각하지만, 이상적인 경우는 별도의 Spring Security 구성 세트로이를 허용하는 것입니다.
<시간>내가 시도한 것/고려한 것
동적 필터 요청을 잡아서 다른 로그인 페이지를 표시하고 외부 인증 (빌드 타임에 포함 된 jar에 패키지 된 모든 외부 처리)을 처리하는 서블릿으로 전달하는 동적 필터를 등록 하여이 아이디어를 구현하는 데 운이 좋았습니다. UAT의 경우)이지만 스프링 앱이 아니기 때문에 디스패치 서블릿이 해당 접근법을 무효화 할 것이라고 생각합니다.
프레임 (앱 인식) 이론적으로 Spring Security 문제를 세분화하여 자체 보안을 갖는 외부 "UAT 뷰어"앱의 프레임 내에 앱을 표시하는 아이디어를 고려했습니다. 그러나 그것이 외부 및 내부 응용 프로그램에 대해 다른 쿠키를 생성하는지 여부는 알 수 없습니다 (보안상의 이유로 프레임을 거의 고려하지 않습니다). 클릭 재킹을 방지하기 위해 x-frame-options 헤더의 모든 프레임을 거부하는 것이 이상적이지만,이 방법이 가능하다면 프레임 정책을 동일 출처로 변경하기 만하면됩니다.
프레임 접근을 먼저 시도하고 다시보고하겠습니다.
- 답변 # 1
관련 자료
- Numpy Python으로 여러 이미지의 RGB 단일 채널의 평균 값을 얻는 방법은 무엇입니까?
- pandas - 여러 행에 나열 할 단일 셀 문자열
- amazon web services - dynamodb에서 단일 키 값으로 여러 항목을 업데이트하는 방법은 무엇입니까?
- javascript - 단일 jquery 스크립트로 한 페이지에서 여러 비디오 재생
- gsub - 여러 공백을 제거하고 R에 단일 공백을 남겨 둡니다
- python - 단일 Django 모델 필드에 가능한 여러 데이터 유형이 있습니까?
- dplyr - R의 변수 이름을 제어하면서 단일 mutate () 문장에 여러 across () 결합
- javascript - 문자열에서 여러 "\ n"을 일치시키고 단일 "\ n"으로 바꾸는 방법
- python - 열별 조건을 기반으로 단일 DataFrame에서 여러 DataFrame 생성
- python - 하나의 양식이 다른 양식에 링크되는 flask 및 WTForms를 사용하여 단일 페이지에 여러 양식
- pandas - 파이썬의 세트 수를 기반으로 단일 행을 여러 행으로 분할
- text processing - 한 번의 패스로 파일에서 여러 값을 추출하는 방법은 무엇입니까?
- Spark-Scala에서 단일 문자열 열을 여러 열로 분할
- mysql - SQL의 단일 셀에서 여러 값을 쿼리하는 방법
- sql server - 구조가 동일한 여러 테이블의 데이터를 추가 열이있는 단일 대상 테이블로 복제 하시겠습니까?
- lambda - 입력 목록에서 요소의 순서를 유지하여 여러 목록을 단일 목록으로 병합
- python - 단일 열에 여러 열 값 결합
- c++ - 여러 스레드의 공유 잠금은 단독 잠금을 찾는 단일 스레드를 고갈시킬 수 있습니다
- javascript - mapbox-gl-js의 단일 레이어에 여러 줄을 어떻게 사용합니까?
- bash - 여러 파이프 된 awk 명령을 단일 awk 명령으로 병합하는 방법
- java : 스프링 보안 구성 액세스
- java : Spring aop 구성이 Eclipse에서 제대로 작동하지 않습니다.
- Spring Security 3.1.4: anonymousUser 인증으로 인해 대상 페이지에 액세스할 수 없음
- java : 보안 엔드포인트에만 Spring Security 필터를 적용하는 방법은 무엇입니까?
- java : Spring Security에서 오류 404 GET /login을 계속 제공합니다.
- Java 백엔드에서 NextJS 앱으로 HTTP 전용 쿠키를 설정할 수 없습니다.
- Spring Security를 사용하여 양식 로그인과 OAuth2 로그인 중에서 선택
- java : 애플리케이션의 사용자에 대한 최대 세션이 아니라 애플리케이션의 Spring 최대 세션
- java : Spring 컨트롤러에서 요청 매개변수를 분할할 수 있습니까?
- JWT 토큰을 사용한 Spring Security 및 Websocket
이 솔루션은 일반적인 스프링 보안 흐름 외부에서 인증을 중단하고 처리 할 수있는 필터 및 서블릿을 제공하는 별도의 프로젝트 (Maven의 "UAT"프로파일 포함)에 대한 종속성을 추가하고 있습니다.
이 접근법의 문제점은 스프링 보안의 필터가 먼저 요청을 가로 채서 페이지에 인증이 필요한 경우 지정된 로그인 페이지 (또는 기본값)로 리디렉션을 시도한다는 것입니다. 이 문제를 해결하는 방법은 스프링 보안을 비활성화하는 경로를 추가하는 것이므로 요청은 해당 필터를 무시하고 다음과 같이 사용자 정의 추가 필터로 처리합니다.이러한 방식으로, 요청을 애플리케이션에 대한 요청을 먼저 '/ uat-login'에 매핑되고 인증 프롬프트를 표시하는 외부 인증 서블릿으로 리디렉션하는 필터를 가질 수 있습니다.
이에 대한 추가 이점 (IMO)은 애플리케이션의 로그 아웃 기능이 트리거되고 세션 쿠키가 삭제되면 외부 보안에서도 효과적으로 로그 아웃된다는 것입니다.
최상의 방법은 아니지만 효과가 있습니다 개선을위한 제안은 반드시 환영합니다. 나중에 Github 프로젝트에이 작업을 수행하는 데 사용 된 코드를 게시 할 것입니다.