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

파바배라던도님의 프로필 이미지

작성한 질문수

스프링 시큐리티 OAuth2

통합 로그인 구축 관련해서 질문 드립니다.

작성

·

104

0

안녕하세요.

통합인증서버 - 클라이언트 - 백엔드서버 이런식으로 구성 되어 있는데요.

플로우 관해서 질문이 있습니다.

  1. client -> auth server : return url / client id 통합인증서버로 보내고

  2. auth server -> client : auth id 통합인증서버에서 받고

  3. client -> be server : client id / auth id 클라이언트에서 받고

  4. be server -> auth server : client id / auth id 백엔드서버에서 통합인증서버로 보내고

  5. auth server -> be server : access token / refresh token 백엔드서버에서 통합인증서버로 받고

  6. be server -> client : access token / refresh token 백엔드서버에서 클라이언트 보내기

이런식으로 구성을 한다고 하더라구요.

저는 3번에서 바로 auth id를 통합인증서버로 보내고 토큰을 클라에서 받고 저장 그리고 백엔드 보내고 저장이라고 생각이 드는데요.

불필요한 작업이 추가로 하는거 같다라는 생각을 했는데요.

 

클라에서 auth id를 통합인증서버로 보낼때 get으로 보내서 보안 문제가 있어서 서버 투 서버로 보낸다고 하더라구요.(백앤드 서버에서 보내는 것만 받으려고)

어떠한 방식이 옳은건지, 저렇게 하면 보안적으로 더 좋은건지 잘 모르겠습니다.

제가 생각하는 방식으로 해도 되는건지.. 고견 부탁드립니다.

 

답변 1

0

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

파바배라던도님의 통합 로그인 구축에 관한 질문은 매우 중요한 보안 측면을 다루고 있습니다. 특히, OAuth2.0 인증 및 인가 과정을 통해 클라이언트, 인증서버(auth server), 백엔드서버(be server) 간의 통신을 어떻게 보안적으로 안전하게 처리할지에 대한 고민이 담겨 있습니다.

이에 대해, 정수원 지식공유자님이 제공한 답변 중 하나인 “모바일앱의 인증을 위해 자체 인가서버와 소셜로그인을 함께 사용하는 경우”와 관련된 내용이 도움이 될 수 있습니다. 이 답변은 외부 인가서버와 자체 인가서버의 연동, OAuth 2.0 인증 절차에 대한 자세한 설명과 더불어 보안적인 측면을 고려한 방식에 대한 설명이 포함되어 있습니다.

질문자님이 궁금해하신 사항, 특히 클라이언트에서 인증 정보를 인증 서버로 직접 전송하는 것과 백엔드 서버를 통해 인증 서버로 전송하는 방식의 보안적 차이에 대해서는 다음의 핵심 포인트를 이해하면 도움이 됩니다:

  1. 서버 투 서버 방식: 클라이언트에서 직접 인증서버로 인증 정보를 전송하는 대신, 백엔드 서버를 통해 처리하는 접근은 중요한 보안상 이점을 제공합니다. 이 방식은 중간자 공격(man-in-the-middle attack)에 대한 취약성을 줄이는데 도움을 줄 수 있습니다. 클라이언트가 직접 인증서버와 통신할 때 HTTPS가 아닌 경우, 또는 HTTPS라 하더라도 클라이언트 측에서의 보안 처리가 충분히 이루어지지 않은 경우 정보가 노출될 위험이 있습니다.

  2. 토큰의 안전한 처리: 서버 투 서버 통신에서 백엔드 서버는 받은 인증 정보를 기반으로 인증서버로부터 토큰을 안전하게 요청하고 응답 받은 토큰(access token / refresh token)을 다시 클라이언트에 전달합니다. 이 과정에서 토큰이 클라이언트-서버 간의 안전한 채널을 통해 전송되기 때문에 토큰 탈취의 위험이 줄어듭니다.

  3. 보안과 성능의 균형: 보안을 강화하는 과정에서 추가적인 네트워크 통신 단계가 필요함은 사실입니다. 그러나 이러한 방식은 인증 정보 및 토큰의 안전한 처리를 위한 필수적인 단계로서, 보안을 유지하는 데 있어 중요합니다.

여러분의 질문에 대한 명확한 대답은, 보안적인 관점에서 클라이언트에서 직접 인증 정보를 전송하는 방식보다는 서버 투 서버간의 통신을 통해 인증 정보를 처리하는 것이 일반적으로 권장되는 접근법입니다. 이는 인증 과정에서 발생할 수 있는 여러 보안 문제를 완화하는 데 도움을 줄 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

답변 감사합니다. 엉뚱하지만 재직자이신가요? AI이신가요?

RFC 6749 바탕으로 말씀드린 거 거든요. 근데 1~6번 방법은 조금 달라서, 이게 보안상에 문제가 있는건가해서요, 보통 어떻게 사용하는지 궁금하기도 합니다.