Open Authorization의 줄임말로서, 제 3의 애플리케이션이 자원의 소유자인 서비스 유저를 대신하여 해당 서비스를 요청할 수 있도록 자원 접근 권한을 위임하는 방법으로 인증을 위한 산업 표준 프로토콜
- OAuth 방식이 도입되기 전엔, 특정 사이트 A에서 다른 사이트 B의 리소스를 가져오기 위해선 B에 등록된 유저 C의 ID와 PW를 직접 입력 받아 A 서버에 저장해두고 필요시 마다 불러와서 사용
- 위 방식대로 진행시 다음의 문제 발생
- Resource Server : Client가 제어하려는 자원을 보유한 서버로 사이트 B에 해당되는데, B는 A를 신뢰할 수 없다
- Resource Owner : 자원의 소유자로서 ID & PW를 입력하고 로그인하려는 실제 유저로 유저 C에 해당되는데, C는 A에 B에 등록된 자신의 ID와 PW가 공개되는 것에 대해 신뢰 할 수 없다
- Client : Resource Server에 접속해 정보를 가져오려는 웹 애플리케이션으로 사이트 A에 해당되는데, 유저 C의 ID & PW로 보안 문제 발생시 모든 책임을 져야 한다
- 위와 같은 서로 간의 신뢰 문제와 보안 문제 발생시 책임의 문제로 안전한 인증 방식을 위한 OAuth가 도입되었다
- Resource Server : OAuth 2.0 서비스를 제공하며 자원을 관리하는 서버
- ex) Google, Naver, Kakao
- Resource Owner : Resource Server에 본인 계정을 소유한 유저
- ex) Google 계정을 보유한 유저
- Client : Resource Server의 OAuth 2.0 기반 로그인 API를 사용하여 자원을 가져오려고 하는 웹 사이트
- ex) 내가 개발한 웹 사이트
- Authorization Server : Client가 Resource Server가 제공하는 서비스를 사용할 수 있게 인증해주고 access token을 제공해주는 서버
- Client가 Resource Server에 OAuth 2.0 사용 요청
- Resource Server는 Client ID와 Client Secret 정보 제공
- 해당 Resource Server Developer Web Page에서 어떤 Information을 요청할지 범위 지정 (ex. Google Calendar)
- Resource Server가 OAuth 2.0 방식의 로그인 버튼 UI를 제공하여 Resource Owner가 버튼 클릭시 로그인 가능
- Resource Owner가 Client에 접속하여 OAuth 2.0 로그인 버튼을 누르면, Client에서 어떤 유저 정보가 필요한지와 승인 여부 질문
- Resource Owner가 Authorization Server로 접속하여 OAuth 2.0 로그인을 하고 정보 제공 허락 여부 체크
- 승인 완료시 Authorization Server는 Client가 설정한 Client의 Redirect URL로 code 제공
- Client의 Redirect URL 내에서 전달 받은 code, Client ID, Secret 정보를 다시 Authorization Server로 전송하여 허가된 client인지 확인
- Authorization Server에서 Client의 Redirect URL로 Access Token과 Refresh Token 발급
- 해당 Refresh Token을 웹 스토리지 또는 쿠키에 담아서 보관
- 해당 Access Token은 Client의 Server로 HTTP Header에 담아 Login 요청
- Client의 서버는 Resource Server에 API 요청을 하여 필요한 유저 정보를 불러옴
- 불러온 유저 정보로 Client의 서버 DB에서 해당 유저 등록 여부 확인
- 미등록 유저면 DB에 정보를 추가하여 회원가입을 처리하고 자체 Access Token을 발급하고, 등록 유저면 바로 자체 Access Token 발급
- 발급한 자체 Access Token을 Client에게 전달하고 이를 웹 스토리지 또는 쿠키에 담아서 보관
- 인가가 필요한 페이지 접속이나 API 요청을 할 때마다 HTTP Header에 해당 Access Token을 담아서 서버에 요청
- Access Token 만료시 Refresh Token으로 Resource Server로부터 Access Token을 재발급 받아서 Client의 Server로부터 자체 Access Token 재발급 받기
- 보안이 철저하게 보장
- HTTPS를 사용하고 암호화가 필요 없음
- Access Token의 Life-time 설정이 2.0 버전부터 가능해져 보안성 강화
- 다만 절차가 복잡하여 이용 시 어려움