OAuth에 대해 공부할 일이 생겨서 정리해보고자 한다.
페이코에서 제공한 OAuth2.0 Authorization Grant 방식 flow chart
복잡하다. 이걸 어떻게 쉽게 흐름을 이해할까 고민했는데 사람을 대입해서 연극하듯이 생각해보니까 쉽게 이해가 되는것 같다.
사용자: (서비스에게) 저 서비스 이용하려고 왔는데요
서비스: (사용자에게) 오셨어요? 이거 당신에게 발급된 ClientID랑 Redirect_URI인데 가지고 인증 서버에게 가세요
사용자: (인증 서버에게) 저 서비스한테 받아온 ClientID랑 Redirect URI인데 로그인 하려구요
인증서버: (사용자에게) 로그인 페이지 여깄어요, 아이디랑 패스워드 입력하세요
사용자: (인증 서버에게) 여기 아이디랑 패스워드요
인증서버: (사용자에게) 오 로그인 되었구요 인증 코드 드릴게요
사용자: (서비스에게) (Redirect_URI로) 여기 인증서버한테 받아온 인증코드요~
서비스: (인증 서버에게) 저 이거 사용자가 인증코드 줬는데 이거 당신이 발급해준거 맞아요? 맞으면 제가 리소스 가져다 쓸 수 있도록 액세스 토큰 주세요
인증서버: 네 확인해 보니 맞아요, 액세스 토큰 드릴게요
서비스: (사용자에게) 로그인 되셨어요~
사용자: (서비스에게) 감사합니다. 저 글 좀 보여주세요
서비스: (리소스 서버에게) 사용자가 글 좀 보여달라고 해요, 액세스 토큰 여기있구요, 글 정보 좀 주세요
리소스 서버: (서비스에게) 액세스 토큰 확인되었구, 글 정보 드릴게요
서비스: (사용자에게) 글 받아왔어요~
위 내용 외에도 권한 스코프 설정, 사용자에게 인증 확인 등의 절차가 있다.
위 과정에서 액세스 토큰은 보안으로 인해 유효시간이 매우 짧게 설정되어서 이를 극복하려고 액세스 토큰을 발급할때 리프레쉬 토큰을 함께 주기도 한다. 이런 리프레쉬 토큰을 다시 보내면 액세스 토큰을 새로 발급해준다고 한다.
Authorization Code Grant 방식 외에도 Implicit Grant 방식, 이 있는데 위 방식에서 인증 코드 교환을 생략하고 과감하게 바로 액세스 토큰을 발급하는데 보통 2주? 정도로 길게 잡는다고 한다. 이 방식은 당연히 위 방식보다 보안이 약하다고한다. 요새 프론트엔드 대세인 SPA나, 네이티브 모바일앱에서 쓴다고 한다.