OAuth

Open Authorization
인증을 위한 표준 프로토콜의 한 종류

  • 인증을 중개해주는 방식
    • 이미 사용자정보를 가지고 있는 소셜서비스(Google, Naver, Kakao 등)에서 인증을 대신 진행 -> 인증 후 인가를 위한 토큰 발급


OAuth 용어

  • Resource Owner : 유저
  • Client : resource에 접근하는 application
  • Authorization Server : authorization code와 access token을 발급하는 서버
  • Resource Server : 유저의 개인정보를 가지고 있는 애플리케이션서버, token을 서버로 주면 개인정보 응답해줌


OAuth 2.0 인증 절차 종류

  • Authorization Code Grant
    • Client가 다른 사용자 대신 특정 리소스에 접근을 요청할 때 사용
    • 리소스 접근을 위해, Authorization Server에서 받은 권한 코드로 리소스에 대한 액세스 토큰을 받는 방식
    • 다른 인증 절차에 비해 보안성이 높아 주로 사용
  • Implicit Grant
    • Authorization Code Grant 와 다르게 권한 코드 교환 단계가 있음
    • 액세스 토큰을 즉시 반환받아 이를 인증에 이용하는 방식
  • Resource Owner Password Credentials Grant
    • Client가 암호를 사용하여 액세스 토큰에 대한 사용자의 자격 증명을 교환하는 방식
    • Resource Owner에서 ID, Password를 전달 받아 Resource Server에 인증하는 방식으로 신뢰할 수 있는 Client 기능
  • Client Credentials Grant
    • Client가 컨텍스트 외부에서 액세스 토큰을 얻어 특정 리소스에 접근을 요청할 때 사용하는 방식


OAuth 인증과정 (Authorization Code Grant)

au

au

ex) 유저 홍길동mon이라는 application에서 OAuth서비스로 Kakao 이용

  1. 홍길동(Resource Owner) -> mon : Kakao OAuth 서비스 요청
  2. mon(Client) -> Kakao(Authorization Server) : Authorization code 요청
  3. Kakao -> mon : Authorization code 부여 (redirect)
  4. mon -> Kakao : Authorization code 전달 + Access Token 요청
  5. Kakao -> mon : Access Token 부여
    • access token(비교적 짧은 만료기간을 가짐) + refresh token(비교적 긴 만료기간을 가짐)을 함께 부여
    • access token이 만료될 때 refresh token을 통해 access token을 재발급 받아 재 로그인 할 필요없게끔
  6. mon -> Resource Server : Access Token으로 홍길동의 Resource(개인정보) 접근요청
  7. Resource Server -> mon : 토큰 유효성 검사 후 Resource 넘겨줌


JWT와 차이점

JWT는 Token의 한 형식이고, OAuth는 하나의 Framework
=> JWT가 과일이라면 OAuth는 과일을 담는 상자

JWT
권한을 행사할 수 있는 토큰의 종류
토큰 자체에 유저정보를 담고 있음
HTTP 헤더에 실어 전달함으로써 유저 세션을 유지할 필요가 없고 가볍게 데이터를 주고받을 수 있다는 장점

OAuth
토큰을 발급하고 인증하는 오픈 스탠다드 프로토콜
토큰을 통해 다시 Resource Server로 API요청을 보내야만 유저정보(resource)를 받아올 수 있음


OAuth를 통해 내가 만든 사이트를 사용하려는 유저가 자신의 카카오 계정과 비밀번호를 우리 사이트에 알려주지 않아도, 카카오에 있는 유저의 정보로 내가 만든 서비스에서 안전하게 사용할 수 있다.


Reference
https://about-tech.tistory.com/entry/Security-OAuth-20%EB%9E%80-%EA%B0%9C%EB%85%90-%EC%9D%B8%EC%A6%9D%EB%B0%A9%EC%8B%9D
https://velog.io/@kjhxxxx/OAuth-OAuth-2.0-%EC%9D%B4%EB%9E%80
https://hwannny.tistory.com/92
https://lewis-kku.tistory.com/34

업데이트: