갑자기 회사에서 페이스북 계정으로 로그인하는 기능을 제공하고 페이스북 프로필 이미지를 가지고 와서 사용하자는 이야기가 나왔다고 합시다. 왜냐하면 요즘 대부분 서비스에 SNS 로그인을 제공하기도 하고, 유저는 번거로운 가입의 허들 없이 서비스를 바로 이용할 수 있게 때문입니다.
회사의 결정으로 갑자기 어떻게 해야 할지 난감해집니다.
"우리 서비스에서 유저 당신의 페이스북 프로필 이미지를 가져와야 하니까 페이스북 아이디와 비밀번호를 주세요!"
라고 한다면 유저가 "네!" 라고 하면서 순순히 줄까요? 당.연.히. 안 주겠죠.
그럼 어떻게 해야 할까요?
그래서 등장한 것이 OAuth! 안전하고 신뢰할 수 있게 제3자 시스템의 회원 인증을 하고 유저 정보에 대한 권한을 부여하는 기술입니다.
OAuth
- Open Authorization의 약자로 외부 서비스(3rd Party Application)의 인증 및 권한 부여를 관리하는 범용 프레임 워크
- 스펙 문서 : RFC 6749
- Facebook, Google, Twitter 등에서 다양한 플랫폼에서 널리 사용
페이스북(Authorization Server)에게 "당신의 회원 중 한 명이 우리 서비스를 이용하는데, 그 유저의 프로필 이미지를 받고 싶어."
- 특정 유저의 모든 정보가 아닌 프로필 이미지로 한정
라고 하면서 페이스북에 허락을 받아야 합니다. 물론 허락하기 전에 이미 우리 서비스(Resource Owner)는 페이스북에 Client ID, Client Secret, Authorized redirect URIs가 등록되어 있어야 합니다. 무턱대고 허락해달라고 하면 안 되겠지요.
물론 유저(Client)한테도 "지금 당신의 프로필 이미지를 페이스북에게 전달받아도 되겠어? 괜찮으면 동의해줘"
라고 알려줘야 하죠.
- 프로필 이미지로 한정
이후에 우리 서비스(Resource Owner)는 페이스북에게 "유저가 페이스북 프로필 이미지 받는데 동의했어!"
그러면 페이스북(Authorization Server)은 Authorizaiton Code를 우리 서비스(Resource Owner)에 전달합니다. 그리고 우리 서비스(Resource Owner)는 다시 유저(Client)에게 Authorization Code를 전달합니다. 유저(Client)는 받자마자 페이스북으로 Client Secret + Authorization Code를 전송합니다. (물론 더 값을 전송하겠지만, 2개만 썼습니다.)
페이스북(Authorization Server)은 유저(Client) 일치하는지 확인하고 해당 유저의 페이스북 프로필 이미지를 이용할 수 있는 Access Token을 전달해줍니다.
- Access Token은 해당 유저의 특정 기능을 사용할 수 있는 식별자로 짧은 유효 기간을 가지고 있음 (페이스북의 아이디와 비밀번호를 전달하는 것과 같음. 노출되면 안 됨)
- Refresh Token은 보통 Access Token과 같이 전달되는데, Access Token의 유효시간이 만료되면 Refresh Token을 토큰으로 Access Tokend를 다시 전달받는 형태임
이제 페이스북의 허락과 유저에게 동의도 받았어요. 유저의 페이스북 프로필 이미지를 가지고 오려고 합니다. 그럼 어떻게 해야 할까요?
페이스북(Resource Server)에게 accessToken을 포함해서 페이스북 API로 프로필 이미지를 받아오면 됩니다.
이러한 과정으로 회사에서 결정한 페이스북 로그인 처리와 페이스북 프로필 이미지를 사용할 수 있게 되었습니다. 미션 컴플리트!
저희 회사에서 사용하는 SNS 로그인이 이런 과정으로 진행되고 있구나, 라는 걸 제대로 알게 되었습니다. 작성하다가 몇 가지 궁금한 사항이 생겼는데, 출근하면 개발 담당자분들께 물어봐야겠어요.
생활 코딩을 들으면서 제가 정리를 했는데, 잘 정리가 되었는지 모르겠지만, 여기까지 써보겠습니다.
※ 저는 페이스북을 Authorization Server와 Resource Server를 구분했는데, Authorization Server는 Access Token을 전달받는 과정을 담당하는 서버를, Resource Server는 Access Token를 전달받고 난 후에 특정 기능을 사용할 때로 이해해서 그렇게 써봤습니다.
참고
- WEB2 - OAuth (생활코딩) : https://opentutorials.org/course/3405
- 생활코딩 설명은 감동적이에요! 짧은 영상이 9강이 있는데, OAuth에 대해 좀 자세하게 알고 싶으시면 들어보세요.
'개발용어' 카테고리의 다른 글
알아두면 좋은 개발 용어 9 (Hash, 해시) (0) | 2021.07.04 |
---|---|
알아두면 좋은 개발용어 8 (API, 마이그레이션) (0) | 2021.05.23 |
알아두면 좋은 개발용어 6 (딥링크) (0) | 2021.05.15 |
알아두면 좋은 개발용어 5 (세션) (1) | 2021.05.09 |
알아두면 좋은 개발용어 4 (쿠키) (0) | 2021.05.02 |