카카오 Oauth 로그인 관련 질문

안녕하세요 카카오 로그인 플로우 관련 질문이 있습니다. 앱 환경에서 질문이 있는데요.

우선 웹 환경에서 카카오 로그인을 진행할 경우 백엔드와 프론트엔드 중 백엔드가 모든 책임을 가지고 진행하는 것이 맞다고 알고 있습니다. 인가 코드나 엑세스 토큰을 프론트엔드에서 발급받은 후 백엔드로 넘기는 과정에 있어서 탈취당할 위험이 있기 때문에 백엔드에서 redirect_uri에 사용할 API를 만들어서 내부적으로 모든 과정이 진행되도록 하는 것이 좋다고 알고 있습니다.

앱 환경 같은 경우에는 웹뷰로 넘겨서 웹과 같이 진행을 하거나 앱에서 제공하는 SDK를 쓰는 방법이 있을 것 같습니다.
프론트엔드에 대한 지식이 많지는 않아 잘 모르지만 웹뷰로 넘겨서 진행할 경우에는 사용자의 사용성을 해칠 수도 있고 SDK를 쓰는 것이 더 권장된다고 알고 있습니다.

다만 SDK를 사용할 시 AccessToken을 발급받는 과정까지 한 번에 진행되는 것으로 알고 있는데 여기서 백엔드고 AccesToken을 넘기는 과정이 있다면 이 또한 토큰을 탈취당할 위험이 있다고 생각됩니다. 그렇기 때문에 소셜 로그인을 통해 가입할 때 필요한 정보들을 프론트엔드에서 받아온 후 그 정보만을 백엔드로 넘기는 방법이 권장된다는 글을 본 적이 있는데요.

제가 궁금한 것은 받아오는 사용자의 정보 중 바뀌지 않고 고유한 값을 가지는 것은 id에 해당하는 ‘회원 번호’ 밖에 없는 것 같은데 해당 내용만을 프론트엔드가 백엔드로 넘겨서 자체 서비스 토큰을 발급하는 과정이 권장되는 것이 맞는지입니다. 제가 제대로 이해한 것이 맞다면 회원 번호만을 통해 유저를 구분하고 자체 서비스 토큰을 발급하는 과정 또한 회원 번호를 탈취당하면 보안에 위험이 있을 것 같은데, 해당 문제를 처리할 수 있는 방법이 무엇이 있을까요?

안녕하세요.

우선 웹 환경에서 카카오 로그인을 진행할 경우 백엔드와 프론트엔드 중 백엔드가 모든 책임을 가지고 진행하는 것이 맞다고 알고 있습니다. 인가 코드나 엑세스 토큰을 프론트엔드에서 발급받은 후 백엔드로 넘기는 과정에 있어서 탈취당할 위험이 있기 때문에 백엔드에서 redirect_uri에 사용할 API를 만들어서 내부적으로 모든 과정이 진행되도록 하는 것이 좋다고 알고 있습니다.

네, 상대적으로 공개된 환경인 웹에서는 백엔드에 일임하시면 조금더 안전하게 처리 할 수 있으므로 권장합니다.

앱 환경 같은 경우에는 웹뷰로 넘겨서 웹과 같이 진행을 하거나 앱에서 제공하는 SDK를 쓰는 방법이 있을 것 같습니다.
프론트엔드에 대한 지식이 많지는 않아 잘 모르지만 웹뷰로 넘겨서 진행할 경우에는 사용자의 사용성을 해칠 수도 있고 SDK를 쓰는 것이 더 권장된다고 알고 있습니다.

네, 개인 소유 모바일 기기에서 동작하는 앱환경은 사용성 측면에서도 권장하고 있습니다.

다만 SDK를 사용할 시 AccessToken을 발급받는 과정까지 한 번에 진행되는 것으로 알고 있는데 여기서 백엔드고 AccesToken을 넘기는 과정이 있다면 이 또한 토큰을 탈취당할 위험이 있다고 생각됩니다. 그렇기 때문에 소셜 로그인을 통해 가입할 때 필요한 정보들을 프론트엔드에서 받아온 후 그 정보만을 백엔드로 넘기는 방법이 권장된다 는 글을 본 적이 있는데요.

중요정보가 격리되는 것을 권장한다 정도로 보시면 좋을 것 같고, 운영하시는 서비스 상황에 따라 취사 선택하시면 좋을 것 같아요.

제가 궁금한 것은 받아오는 사용자의 정보 중 바뀌지 않고 고유한 값을 가지는 것은 id에 해당하는 ‘회원 번호’ 밖에 없는 것 같은데 해당 내용만을 프론트엔드가 백엔드로 넘겨서 자체 서비스 토큰을 발급하는 과정이 권장되는 것이 맞는지 입니다. 제가 제대로 이해한 것이 맞다면 회원 번호만을 통해 유저를 구분하고 자체 서비스 토큰을 발급하는 과정 또한 회원 번호를 탈취당하면 보안에 위험이 있을 것 같은데, 해당 문제를 처리할 수 있는 방법이 무엇이 있을까요?

카카오 로그인이 없는 일반 회원가입을 제공하는 서비스를 생각해보시면 좋을 것 같습니다.

이 경우 당연히 자체 토큰을 발급 받아야할 것이고
사용자가 가입 시, 회원정보를 입력하여 전달하게되므로 마찬가지로 관건은 적절한 보안조치를 하는 것입니다.

일반적으로
자체 회원가입 + 각종 소셜로그인 으로 회원가입 하니 다양한 경로의 회원가입을 백엔드로 받고 자체 토큰 발급하는 것이 효율적이겠지요.

물론 카카오 로그인만 사용하는 서비스도 있으니 상황에 따라 다릅니다.
(Oauth2 표준이 http 리다이렉트를 기반으로 처리되니 백엔드로 Spring Security를 사용하거나 OKTA OIDC를 사용하면 네이티브 SDK가 아닌 백엔드에 일임하며 웹뷰를 사용할 수 밖에 없기도합니다.)

그리고
회원 번호를 탈취당 했을때를 고려해 적절한 보안 장치를 두는 것도 일반적입니다.
회원정보 변경, 패스워드 변경 등. 중요한 백엔드요청이 올바른 요청인지 검증하는 것과 마찬가지 입니다.


즉, 카카오 로그인을 사용하지 않는다고 해도 고려해야할 부분인거죠.
아래 내용도 참고 해보시면 좋을 것 같아요.

참고. 주요 호출 검증 PKCE 응용 Proof Key for Code Exchange by OAuth Public Clients

1개의 좋아요