OAuth 2.0

박효상·2022년 4월 25일
0

BACKEND-TIL

목록 보기
10/21
post-thumbnail

OAuth 2.0 이란?

Open Authorization의 줄임말로서, 제 3의 애플리케이션이 자원의 소유자인 서비스 유저를 대신하여 해당 서비스를 요청할 수 있도록 자원 접근 권한을 위임하는 방법으로 인증을 위한 산업 표준 프로토콜

OAuth 2.0 배경

  • 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가 도입되었다

OAuth 2.0 구성

  • 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을 제공해주는 서버

OAuth 2.0 인증 과정

  1. Client가 Resource Server에 OAuth 2.0 사용 요청
  2. Resource Server는 Client ID와 Client Secret 정보 제공
    • 해당 Resource Server Developer Web Page에서 어떤 Information을 요청할지 범위 지정 (ex. Google Calendar)
  3. Resource Server가 OAuth 2.0 방식의 로그인 버튼 UI를 제공하여 Resource Owner가 버튼 클릭시 로그인 가능
  4. Resource Owner가 Client에 접속하여 OAuth 2.0 로그인 버튼을 누르면, Client에서 어떤 유저 정보가 필요한지와 승인 여부 질문
  5. Resource Owner가 Authorization Server로 접속하여 OAuth 2.0 로그인을 하고 정보 제공 허락 여부 체크
  6. 승인 완료시 Authorization Server는 Client가 설정한 Client의 Redirect URL로 code 제공
  7. Client의 Redirect URL 내에서 전달 받은 code, Client ID, Secret 정보를 다시 Authorization Server로 전송하여 허가된 client인지 확인
  8. Authorization Server에서 Client의 Redirect URL로 Access Token과 Refresh Token 발급
  9. 해당 Refresh Token을 웹 스토리지 또는 쿠키에 담아서 보관
  10. 해당 Access Token은 Client의 Server로 HTTP Header에 담아 Login 요청
  11. Client의 서버는 Resource Server에 API 요청을 하여 필요한 유저 정보를 불러옴
  12. 불러온 유저 정보로 Client의 서버 DB에서 해당 유저 등록 여부 확인
  13. 미등록 유저면 DB에 정보를 추가하여 회원가입을 처리하고 자체 Access Token을 발급하고, 등록 유저면 바로 자체 Access Token 발급
  14. 발급한 자체 Access Token을 Client에게 전달하고 이를 웹 스토리지 또는 쿠키에 담아서 보관
  15. 인가가 필요한 페이지 접속이나 API 요청을 할 때마다 HTTP Header에 해당 Access Token을 담아서 서버에 요청
  16. Access Token 만료시 Refresh Token으로 Resource Server로부터 Access Token을 재발급 받아서 Client의 Server로부터 자체 Access Token 재발급 받기

OAuth 2.0 특징

  • 보안이 철저하게 보장
    • HTTPS를 사용하고 암호화가 필요 없음
    • Access Token의 Life-time 설정이 2.0 버전부터 가능해져 보안성 강화
  • 다만 절차가 복잡하여 이용 시 어려움
profile
집념의 백엔드 개발자

0개의 댓글