https://www.youtube.com/watch?v=6XZ8oJOex_U&list=PLJkjrxxiBSFALedMwcqDw_BPaJ3qqbWeB&index=3
해당 유튜브 영상의 11분대에 등장하는 데브톡 답변 상에서, OAuth 로그인 구현과 관련하여 프론트엔드, 또는 백엔드 중 한 쪽이 순수하게 책임을 지지 않고,
양 측이 분할하여 책임을 분배하는 것은 보안 상에 문제가 있다고 합니다.
하지만
https://devtalk.kakao.com/t/restapi/134889
본 데브톡 응답에 따르면 프론트/백엔드 분할 책임 방식이 지향된다고 하는데요,
https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#before-you-begin-process
일단 docs 구조도에 따르면, Redirect URI로 백엔드 서버에 Authorization Code를 전달하는 것으로 보아 백엔드 책임 방식인 듯 보이는데
OAuth 책임을 프론트/백엔드로 분할하여 수행하는 방식과,
어느 한 쪽이 도맡아 수행하는 방식 중 웹페이지 기준 하에 어느 방식이 더 적합할 지 질문 드립니다.
안녕하세요.
웹 서비스의 Oauth 인가코드 처리는 서비스 측의 백엔드에서 도맡아 처리하도록 구성 부탁드립니다.
많은 서비스들이 웹서버와 API 서버(백엔드)가 분리되어 있기에 브라우저에서 인가코드를 획득하여 백엔드로 전달하는 경우도 있을 수 있는데요. 서비스 측 시스템 구성상 확고한 이유가 없다면 이와 같이 전달하는 것은 적절하지 않습니다.
결국 서비스는 인가코드로 접근토큰을 발급받고 이를 이용하여 서비스 측 회원 가입과 인가처리(ex, 세션, jwt)등 필요한 작업을 처리 후 사용자에게 적절한 url로 리디렉션 하셔야 하는데요
서비스 측 회원 가입과 인가처리는 결국 백엔드 측 처리 내용이라 굳이 프런트에 한번 들렸다가 인가코드를 백엔드로 전달하실 필요가 없습니다.
인가코드는 redirect_uri로 단 한 번 리디렉션 되며 접근토큰 발급 성공 여부에 상관없이 단 한 번만 사용 가능합니다.
브라우저에서 이를 취급하여 사용하는 경우 서비스 측 구현 내용에 따라 중복 사용되어 백엔드에서 많은 오류발생시킬 수도 있습니다.
즉, 인가코드를 브라우저에 한번 들렸다가 백엔드로 전달하는 것은 서비스 측 요구사항에 따라 그렇게 구현하실 수도 있겠지만 일반적으로 권장드리지 않습니다.
tim.l
4월 15, 2024, 5:33오전
3
어느 한 쪽이 도맡아 수행하는 방식 중 웹페이지 기준 하에 어느 방식이 더 적합할 지 질문 드립니다.
안녕하세요. OAuth2 소셜로그인 책임 분할은 운영하시는 서비스 상황에 따라 선택하시면됩니다.
유튜브 영상에서 인용된 내용은
(1) 카카오 SDK 를 사용가능한 네이티브앱 개발환경이라면 카카오 SDK에 일임하는 것을 권장한다는 것이고
(2) 리프레시토큰이나 어드민키 등 일반적으로 백엔드에서만 사용을 권장하는 기능을 사용하거나
백엔드에서 내부적으로 카카오와 교신이 격리된다면 백엔드에 일임하는 것이 상대적으로 보안에 좋겠지요.
본 데브톡 응답에 따르면 프론트/백엔드 분할 책임 방식이 지향된다고 하는데요,
(3) 프론트에서 인가코드요청 보내고 리다이렉트 URI를 백엔드로 설정해서 백엔드에 일임하는 방식을 안내드렸는데 잘못 전달 되었군요.
위에 @woody.ho 가 설명하신 것과 같이 굳이 프론트에 인가코드를 전달하실 필요는 없습니다.
이렇게 처리하는 것을 "프론트/백엔드 분할 책임 방식"이라 표현 하는 것을 처음봤네요…
아래 보안 권장사항도 참고 해보시면 좋을 것 같습니다.
보안 권장사항 | Kakao Developers 보안 권장사항