Network
[Network] OAuth란?
hanbindev
2021. 4. 2. 23:06

프로그래머스에 들아가서 로그인 버튼을 누르면, 위와 같은 화면이 나온다.
저기서 만약 Github으로 계속하기 버튼을 누른다면, Github 로그인 페이지로 이동하게 된다.
그리고 그곳에서 Github 로그인을 하면 프로그래머스 서비스를 이용할 수 있게 된다.
나는 분명 Github 로그인을 했는데 왜 프로그래머스 서비스를 이용할 수 있는 걸까?
이것에 대해 알려면 OAuth를 알아야 한다.
OAuth란?
로그인을 제공하는 플랫폼(Github)의 계정만 있다면 외부 서비스(프로그래머스) 에서도 인증을 가능하게 하여 API를 사용할 수 있도록 해주는 프로토콜이다. 그렇기 때문에 Github 로그인을 했는데도 프로그래머스의 서비스를 사용할 수 있게 된 것이다.
OAuth가 무엇인지 알았다면 이제 OAuth의 인증 절차에 대해 알아보자
OAuth 인증 방식

용어 정리
Resource Owner | Resource Server의 계정을 소유하고 있는 사용자 ex) User |
Client | OAuth를 이용해 서비스를 제공하는 앱 ex) 프로그래머스, 내가 개발하고 싶은 앱 |
Authorization Server | 토큰을 발급해주는 서비스 ex) Github 로그인 기능 |
Resource Server | Resource Owner의 자원을 관리하는 서버 ex) Github |
인증 절차
- Resource Owner가 Authorization Server에서 보내준 Github 로그인 페이지에 ID/PW 정보를 입력한다.
- Authroization Server가 Authorization Code를 Redirect URL에 결합시켜 헤더에 담아 Resource Owner에게 전달한다.
- ex) { "Location" : "http://my-app.com?code=thisisauthorizationcode" }
- Authorization Code는 짧은 시간 안에 만료된다 (약 10분)
- Resource Owner가 Redirect URL에 리다이렉트하면 Client가 Client ID , Client Secret , code, Redirect URL 정보를 Authroization Server에게 전달해 Access Token 발급 요청을 한다.
- Access Token이 발급되었다면 Resource Owner에게 전달하며 로그인을 성공시킨다
리소스 요청
이후에 Resource Owner가 Client에게 요청할 때마다 Access Token을 요청에 포함시킨다.