• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

안녕하세요 강사님 질문 있습니다!

24.03.15 17:25 작성 조회수 76

0

안녕하세요! 수업 강의 내용은 아니지만 연관이 있는 질문입니다! OAuth Client와 Resource server가 하나의 서버에 있어도 되나요?

제가 토이 프로젝트를 구성하고 있습니다. 소셜 로그인 기능을 넣으려고 이것저것 설계하다 보니까 백엔드 서버에 OAuth2 Client와 Resource server 설정이 같이 있어야 하겠더라고요.

Resource server 설정이 필요한 이유는, jwt 검증 때문입니다. 예를 들어 구글에서 발급받은 액세스 토큰을 프론트엔드로 반환해줄 거고, 프론트엔드(Nextjs)는 헤더에 access token과 함께 요청을 보내겠죠. 이때 백엔드 서버는 jwt 검증을 해야할 것입니다.

수업에 이런 부분을 구두로 말씀하신 건 잘 모르겠는데, 저희 실습에서는 OAuth2 Client에서 Resource server로 요청해보는 건 있었지만 그 둘이 하나의 application.yml에 있는 실습을 하지 않았던 것 같아서요.

chat gpt 유료 결제해서 쓰고 있어서 이 부분 가능하다고 답변을 듣긴 했는데 강사님이 맞다고 해주셔야 안심할 수 있을 것 같습니다. 만약..아니라고 하면 사실 많이 혼란스러울 것 같지만 간단한 가이드라도 부탁드려도 될까요..흐름이라도..

문득 드는 생각은

  1. 하나의 application.yml에 OAuth2 Client와 Resource 서버 설정을 다 넣는다

  2. OAuth2Client와 Resource 서버를 모듈을 분리한다. 이 경우에는 프론트에서 요청이 들어왔을 때 OAuth2 Client모듈이 Resource server 모듈에 자원을 요청한다(리소스 서버에서 검증까지)

 

둘 다 가능하다고 하면 지금 시간이 그리 여유있지 않아 1번으로 가고 싶긴 한데 이게 일반적인 방법인지 궁금합니다.

 

p.s. 새로운 security 6 강의는 언제 올라오나요? 목이 빠졌습니다..ㅋㅋㅋ

답변 2

·

답변을 작성해보세요.

0

답변이 좀 늦었습니다.

사실 Resource server 는 Client 와 다른 레이어입니다.

Client 는 사용자가 이용하는 제3자의 어플리케이션을 의미하는 것이고 Resource server 는 사용자가 속한 다른 서비스를 의미합니다. 즉 클라이언트의 백엔드가 아닙니다.

위 내용으로 보자면 Resource server 는 구글에 속한 서버를 의미합니다.

스프링 시큐리티에서 Resource server 모듈을 제공함으로써 인가서버와의 통신을 통해 토큰의 유효성을 검증할 수 있도록 기능을 제공하고 있습니다.

그래서 엄밀하게 보자면 OAuth2Client 는 클라이언트이고 Resource server 와 AuthorizationServer 는 구글에 속한 서버라 볼 수 있습니다.

다만 스프링 시큐리티의 Resource server 를 활용해서 구글로부터의 토큰 검증을 통해 여러 가지 정보를 가져와서 클라이언트의 백엔드로 활용할 수 있을 뿐입니다.

결론적으로 클라이언트와 Resource server 는 별도의 서버로 운영되어서 서비스 해야 되고 하나의 설정으로 두 서버를 관리하는게 맞지는 않는것 같습니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.03.17

안녕하세요, 인프런 AI 인턴입니다.
literatet님, OAuth2 Client와 Resource Server를 하나의 서버에 구성하는 것이 가능합니다. 실제로 많은 토이 프로젝트나 간단한 어플리케이션에서는 하나의 애플리케이션 안에 OAuth2 Client와 Resource Server를 둘다 설정하여 운영하는 경우가 많습니다.

질문에서 언급하신 바와 같이, 필요한 경우 application.yml 파일에서 OAuth2 Client와 Resource Server 관련 설정을 모두 포함시켜서 사용할 수 있습니다. 이는 설정 값만 따로 관리되며, 하나의 어플리케이션에서 OAuth2 인증과 리소스 서비스를 모두 처리할 수 있도록 해줍니다.

예를 들어, JWT를 사용한 리소스 서버 구성을 다음과 같이 설정할 수 있습니다:

spring:
  security:
    oauth2:
      resourceserver:
        jwt:
          jwk-set-uri: "https://example.com/oauth2/default/v1/keys"

이처럼 OAuth2 Client에 대한 설정도 동일한 application.yml 파일에 넣어 관리할 수 있습니다. 따라서 1번 방식으로 가는 것이 짧은 시간에 구현하기에 더 효과적일 수 있습니다. 리소스 서버와 클라이언트의 설정을 모두 포함하는 것은 비교적 흔한 접근 방식입니다.

강의와 관련된 새로운 업데이트는 저희 인프런 사이트를 통해 확인해 주시면 될 것 같습니다. 강의 업데이트 시기에 대한 자세한 정보는 제가 제공해 드릴 수 없는 점 양해 부탁드립니다.

마지막으로, 모듈 분리 방식(2번째 옵션)을 선택하는 것도 장기적으로는 유지 관리 측면에서 유리할 수 있고 확장성 측면에서도 더 나을 수 있습니다. 그러나 당장 시간이 부족하다면 하나의 설정 파일에서 관리하는 것이 더 신속하게 구현할 수 있는 방법입니다.

도움이 되셨길 바라며, 프로젝트 진행에 행운이 함께하시길 바랍니다!