Oauth 2.0는 무엇일까?
서론
JAVA spring을 찍먹하던 시기 쇼핑몰 프로젝트를 만들며 Oauth2.0을 사용한 경험이 있었습니다.
당시에 시간에 급급해 네이버 디벨로퍼 및 다른 개발 연습 플랫폼에서 제공하는 테스트 코드를
이용하였고 소셜 로그인 하는데 토큰을 이용하여 보안을 담당하는 기능이구나~ 하고
대충 넘어갔는데 이번에 42 Api 를 사용하려다 보니 다시 한번 마주하게 되어 이번 기회에
좀 더 명확히 개념화 하기 위해 공부하게 되었습니다.
OAuth 는 무엇이고 왜 써야할까?
OAuth flow
1) OAuth 는 무엇이고 왜 써야할까?
OAuth가 사용되기 전까지는 표준 인증방식이 없었기에 기본 인증 혹은 각 회사별로 개발한
방법대로 사용자를 확인하는 방식으로 제각각인 인증방식을 사용하였는데 이를 표준화하고 ,
이 인증을 공유하는 애플리케이션 끼리는 별도의 인증이 없이 통합하여 사용가능하게 되었습니다.
우리는 매우 쉽게 OAuth를 만날 수 있는데요, 최근 대부분의 사이트에서 해당 사이트에 가입하지 않아도 네이버.구글.페이스북 등의 아이디로 로그인 할 수 있는 것 이 바로 이 예 입니다.
그렇다면 왜 사용해야할까요?
우리 개발자는 서비스를 사용자에게 제공하는 직업입니다.
취업하게 되는 직무나 원하는 영역에 따라 다르지만 백엔드로 간다면 토이 프로젝트 혹 실무에서
스스로 서버를 구축 하고 로그인 및 회원가입을 위해 사용자로부터 개인정보를 받아
저장하고 관리 하게 되는데 개인정보 이슈도 많고 이것을 관리하는것도 보통일이 아닙니다.
이때 OAuth 2.0을 사용한다면 개인정보 관리책임의 대부분을 소셜 로그인을 제공하는
서드파티 애플리케이션 네이버,구글,페이스북 등에 위임을 할 수 있게 됩니다.
회사 입장에서도 필요한 인력 및 자원도 줄어드니 현 시점 작은 서비스 부터
큰 서비스 까지 소셜 로그인을 제공하지 않는 곳을 찾기가 더 힘들 정도입니다.
2) OAuth flow
찾아보면 훨씬 자세한 flow UML도 있지만 그렇게 디테일한 부분 저도 아직... (_ _)
가장 기본적인 원리를 알려드리기 위해 기본 구조 UML 간단히 만들었습니다.
Client : OAuth 2.0으로 서드파티 로그인을 구현할 자사 서비스
Resource Server : 유저의 개인 정보를 가지고 있는 애플리케이션 (구글,네이버 등)
Resource Owner : 이미 특정 리소스 서버에 가입한 사용자(유저)
Authorization Server : 권한을 부여 해주는 서버, 사용자는 이 서버에 ID,PW를 제공하고 Authorization Code를 발급받고, Client 는 이 서버로 Authorization Code를 제공하고 Token을 발급 받을 수 있게 된다.
흐름도
1.
유저가 서비스 접근 , 로그인 요청
2.
클라이언트 측에서 유저에게 권한 허가 요청
3.
유저가 권한 허가
4.
클라이언트에서 인증서버로 Redirect URL 인증 요청
5.
유저에게 로그인 화면 제공하여 인증
6.
인증 성공시 > Access 토큰 요청 후 발급
7.
제대로 된 토큰이라면 리소스 서버에 접근 성공하게 되고 그렇지 않다면 오류 발생
8.
OAuth를 이용한 로그인 성공
상황에 따라 다르지만 보통 인증 서버로 부터 두 토큰을 함께 부여받게 되는데 access token 은 상대적으로 짧은 만료기간 , refresh token 은 상대적으로 긴 만료기간을 가지고 있어서 엑세스 토큰이 만료 될 경우 다시 로그인 시도를 하는 것이 아니라 리플레시 토큰을 통해 재발급 받아 여러번 로그인 하는 것을 어느정도 방지해줍니다.
3) 그 외, 느낀점
-공식 문서 적극 활용 할 것
-토큰을 어떻게 관리하는 것 이 효율적일지 찾아봐야겠습니다.