스프링 - 앵귤러 (spring-angular2) 애플리케이션을 빌드하려고하는데 보안 모델로 OAuth2를 선택했습니다. 내 새 응용 프로그램은 세 부분으로 구성되어 있습니다. 인증 서버, 백엔드 서버 및 프런트 엔드 (각도 2). 현재 인증 목적으로 OAuth2를 사용 중입니다.스프링 OAuth2 아키텍처에 대한 제안
내 디자인에 따라, 내 서버 (비즈니스 계층)는 인증을 위해 인증 서버 (authorization_code 기반)와 통신하고 OAuth2 토큰 (짧은 액세스 토큰 및 수명이 긴 새로 고침 토큰). 나의 의도는이 새로 고침 토큰을 사용하여 만료까지 필요할 때마다 액세스 토큰을 생성 한 후 로그인을 위해 인증 서버로 리디렉션하는 것입니다. 모든 토큰 관리는 서버에서 처리되며 프런트 엔드는 이에 대해 아무 것도 알지 못합니다.
이제 응용 프로그램을 실행할 때이 디자인을 사용하면 angular2 앱이 먼저로드되고 보호 된 URL (인증 확인)에 액세스하려고 시도합니다. 서버가 401 오류를 반환하면 각도로 인해 로그인을 위해 웹 페이지가 인증 서버로 리디렉션됩니다. 백엔드 서버는 보안을 처리하기 위해 세션을 사용합니다 (기본 oauth2client 설정). 여기서 문제는 공회전으로 인해 세션이 만료 (기본 30 분) 될 때 새로 고침 토큰 (10 일 유효 기간)을 사용할 수 없으며 스프링 보안이 웹 페이지를 로그인 용 인증 서버로 리디렉션한다는 것입니다.
세션 유효 기간을 10 일로 늘리는 것이 좋습니다. 그래서 디자인에서 세션을 피하기 위해 사용자 모델 (db)에 토큰을 저장하고이 토큰에 액세스하고 필터를 사용하여 인증 개체를 만드는 데 사용되는 브라우저에 고유 ID를 보냅니다. Angular는이 ID를 localstorage에 저장하고 모든 요청 헤더를 보냅니다.
이 질문에 입력을 더 추가해야하는지 알려주세요.
1)이 아키텍처가 좋은지 여부에 대한 조언이 필요합니까? 이것을 개선하기위한 제안이 있습니까?
2) 세션 유휴 시간 제한에 대한 걱정없이 새로 고침 토큰을 처리 할 수있는 방법이 있습니까? (앞에서 언급했듯이 봄 세계에 익숙하지 않기 때문에 여기에 작은 것을 놓치고있을 수도 있습니다.)
3) 세션이 없으면 브라우저 (angular2)에 고유 ID를 어떻게 전달할 것을 제안합니까? 나는 또한 쿠키를 피하고 싶다. url 쿼리 문자열은이 설정에서 각도 값 앱에이 고유 값을 전달하는 유일한 방법입니까?
앞으로 동일한 인증 서버를 사용하는 다른 응용 프로그램을 개발할 계획입니다. 초기 인증 및 액세스 토큰 갱신을 위해 인증 서버를 사용합니다. –
또한 짧은 생동 새로 고침 토큰은 활성 사용자가 자주 로그인 화면으로 리디렉션된다는 것을 의미합니다. 이 경우 나는 피하려고합니다. –
OAuth2에서는 서버 측 세션이 필요하지 않습니다. OAuth 토큰은 쿠키 기반 SME와 마찬가지로 세션을 나타냅니다. – dvsakgec