인프런 커뮤니티 질문&답변

김현진님의 프로필 이미지
김현진

작성한 질문수

스프링 시큐리티 OAuth2

마지막 장 front end 에서 리소스 서버 직접 요청

해결된 질문

작성

·

329

·

수정됨

0

안녕하세요. 선생님

어느덧 마지막장이네요.

한가지 질문이 있네요.

사용자에 대한 엑세스 토큰을 발급 받기 위해 사용자가 로그인 링크를 클릭해서 클라이언트 서버에 로그인 요청하면 클라이언트 서버에서 임시코드를 발급 받기 위한 인가서버 요청 url을 만들어 사용자 브라우저로 redirect 하고, 인가서버의 로그인 화면에서 로그인을 하게 되면 인가서버는 임시코드를 parameter 로 넣어서 클라이언트로 redirect 되어, 최종 클라이언트 서버가 사용자에 대한 엑세스 토큰을 인가서버에 요청하여 발급 받잖아요? 그리고 클라이언트 서버가 그 엑세스 토큰을 관리하게 되고..

그러니까 클라이언트 서버가 대신 요청?

 

그런데 마지막장에 리소스 서버에 자원을 요청하는데.. 클라이언트 API 서버가 요청하는 것도 있고.. frond end 자바스크립트에서 클라이언트 서버를 경유하지 않고 직접 리소스 서버에 자원을 요청하는 예제가 있네요.

실무에서는 이렇게 frond end 단에서 직접 리소스 서버로 요청하기도 하는지요?

front end에서 클라이언트 API 서버에 요청을 하여 사용자 정보를 가져와 보여주는 식으로 구현해야 하는 것인지? 아니면 front end에서 직접 리소스 서버에 토큰 들고 요청하여 사용자 정보를 가져와 보여주는 식으로 구현해야 하는지? 실무에서 어떻게 구현하는지 알고 싶네요.

 

 

 

답변 2

1

정수원님의 프로필 이미지
정수원
지식공유자

일반적으로 인가서버로부터 토큰을 발급받게 되면 토큰을 가지고 리소스서버에 접근하는 것은 자연스러운 과정입니다.

다만 이것을 여러 서버를 경유해서 가져올 것인가 아니면 직접 요청할 것인가는 특별한 기준이 있는 것은 아닙니다

이미 토큰을 발급받았고 토큰에 대한 검증이 리소스 서버에서 이루어질 수 있는 환경이라면 어떤 방식이든 상관없습니다.

여러 서버를 경우해서 가져오는 부분은 서버 마다 토큰을 릴레이해서 통신해야 할 것이고(마이크로 서비스처럼) 바로 해당 서버에 토큰을 전달해서 원하는 데이터를 가져와도 됩니다.

마치 아이디/패스워드를 자바스크립트에서 추출한다음 JSON 으로 Rest 형식으로 전달해서 인증을 받고 원하는 데이터를 가져오는 것과 크게 틀리지 않습니다. 다만 보안이슈 때문에 SSL 과 같은 기능이 탑재되어야 하겠죠

김현진님의 프로필 이미지
김현진
질문자

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다.

OAuth2는 널리 사용되는 인증 프레임워크로서, Spring Boot에서도 지원됩니다. 실무에서 프론트엔드에서 직접 리소스 서버로 요청하는 경우는 있습니다. 이는 사용 사례와 보안 요건에 따라 다릅니다.

일반적으로, 클라이언트 서버(즉, 백엔드)를 통해 인증과 토큰 교환 과정을 처리하고, 최종적으로 토큰을 사용해서 리소스 서버에 접근을 선호할 수 있습니다. 이렇게 하면, 토큰 관리와 관련된 보안 이슈를 프론트엔드에서 분리할 수 있어 좀 더 안전하게 접근할 수 있습니다.

반면에, 특정 상황에서는 SPA(Single Page Application)와 같은 프론트엔드 애플리케이션에서 직접 리소스 서버에 접근해야 할 필요가 있을 수 있습니다. 이 경우 OAuth2의 Implicit Flow 또는 PKCE(Proof Key for Code Exchange)를 사용한 Authorization Code Flow 같은 보다 프론트엔드 친화적인 OAuth2 플로우를 선택할 수 있습니다.

시큐리티 관련하여 추가적인 정보가 필요하다면 Spring Security project page 또는 Spring Security Reference Guide를 참고하실 수 있습니다.

선택은 해당 애플리케이션의 보안 요구사항, 속도 및 사용성 요구사항, 그리고 개발 및 유지 보수의 용이성 등 여러 요인을 고려하여 결정해야 합니다. 보안이 중요한 부분이기 때문에, 리소스 서버에 직접 접근할 때는 알맞은 보안 메커니즘이 적용되었는지 항상 확인해야 합니다.

예를 들어, 프론트엔드에서 직접 리소스 서버에 요청할 때는, CORS(Cross-Origin Resource Sharing) 정책을 비롯하여, 토큰 보안, CSRF(Cross-Site Request Forgery) 보호 등의 보안 고려가 필요합니다.

실무에서 어떻게 구현하는지에 대한 정답은 없으며, 각각의 접근 방식이 가진 장단점과 보안 사항을 충분히 이해하고, 프로젝트에 적합한 방식을 선택하는 것이 중요합니다.

김현진님의 프로필 이미지
김현진

작성한 질문수

질문하기