오늘은 OAuth에 대한 간략한 작동 방식을 머릿속에 이미지화 했다.
OAuth를 코드상으로 공부하기 전에 작동방식에 대해 무조건 이해하고 가라는 선배들의 조언들 때문에 정리했다.
이해를 못하고 시작하면 코드상으로 되게 이해하기 힘들다고 해서.. 어쨌든 이해 한 내용 시작!
OAuth란?
사용자들이 특정 서버에 바로 아이디를 보내지 않고 제 3의 서비스 (카카오톡이나, 구글 등)의 서버로 아이디를 보내서 특정 서버의 접근 권한을 부여할 수 있는, 접근 위임을 위한 개방형 표준이다.
사용자가 특정 서버에게 모든 권한을 넘기지 않고 사용자 대신 서비스를 이용할 수 있게 해주는 HTTP 기반의 보안 프로토콜이다.
OAuth 이전의 방식은?
OAuth 이전의 방식은
이런 방식으로 회원가입을 구현했다고 한다.
Consumer은 사용자인데 사용자가 내가 만든 서버에 정보를 넘겨주고 내 서버에서 카카오나 구글 같은 서버로 API를 사용해서 리다이렉트하고 카카오, 구글의 사용자 정보를 확인 후에 일치하면 반환 받고 내 서버로 다시 돌려 준 후 DB에 없으면 저장한다음 회원가입이면 뭐 완료됐다고 하고, 로그인이면 토큰을 줬다고 한다.
근데 MyServer가 어떤 나쁜 의도를 가졌을지 사용자는 모른다
예를 들면 비밀번호 암호화를 하지 않는 서버라든가, 카카오 아이디를 탈취한다는 서버라든가 이런 나쁜 서버일지 사용자는 어떻게 아는가?
그리고 각 사이트마다 API가 달라서 개발자들은 각 사이트 로그인을 구현하려면 API 사용법을 또 다르게 배웠어야 됐다
그래서 OAuth가 등장하게 됐다.
OAuth 등장 및 작동방식 - SSR
로그인 및 정보인가 설정은 이 부분이다
OAuth로 조금 더 공신력있는 카카오나, 구글등으로 로그인하면서, MyServer에 저장될 정보를 선택해서 저장하게 끔 만들 수 있다.
OAuth 서버에서는 Redirect로 내 서버에 정보 인가 범위 토큰을 주고 MyServer에서 다시 정보 인가 범위 토큰으로 OAuth서버에 정보를 요청한 후 DB에 없으면 저장한 후 사용자에게 토큰등을 반환하고 있으면, 바로 토큰등을 반환한다.
OAuth 작동 방식 - CSR
위에랑 달라진 게 OAuth서버가 FE 서버에 인가 범위 토큰을 주고 이걸 BE 서버에 주는 거 밖에 달라진 게 없다
요즘에는 SSR 방식보다 CSR 방식으로 많이 만들기에 이런 식으로 만든다고 한다.
그렇지만 이런 방법이 CSR에서 필수는 아니다, 똑같이 CSR개발 형식에서도 SSR 처럼 바로 BE 서버에 보낼 수 있다고 한다.
하지만 보안상의 이유 때문에 이런 방식을 쓴다고 한다.
정확한 건 아직 내 단계에서는 모르겠다.
궁금했던 점
OAuth는 프로토콜로 들었고, Redirect를 한다고 했다
localhost는 내 아이피를 의미하는데 OAuth 서버에 localhost로 주라고하면 OAuth 서버 자신을 지칭하게 될텐데 이게 왜 이렇게 등록해도 되는 것인가???
이건 OAuth 서버에 요청을 줄 때 요청을 준 서버의 IP도 같이 넘어가기 때문에 OAuth서버에서 localhost로 적힌 것들은 내 서버의 IP로 치환해서 Redirect URI를 바꾸는 작업을 한다고 한다.
근데 이게 구현이 안되어있는 OAuth 서버가 있을 수도 있는데 그런 경우에는 localhost 를 적지 말고 정확한 IP를 적어야 한다고 한다. 근데 대부분의 경우에는 잘 구현되있다고 한다.
'TIL' 카테고리의 다른 글
TIL 2023-11-30 JUnit5 기본 문법 (0) | 2023.11.30 |
---|---|
TIL 2023-11-29 단위 테스트 개념 정리 (0) | 2023.11.29 |
TIL 2023-11-27 하나의 커스텀 예외 클래스로 모든 컨트롤러 예외 처리하기 feat(글로벌 예외 핸들러) (2) | 2023.11.27 |
TIL 2023-11-24 영속성 컨텍스트 동일성 보장 (0) | 2023.11.24 |
TIL 2023-11-23 영화진흥위원회 오픈 API 사용 (파싱 후 DB 저장 방법) (0) | 2023.11.23 |