ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • OAuth
    카테고리 없음 2024. 2. 10. 21:17

    [ 목차 ]

      OAuth 란

      OAuth 는 Open Authorization 의 약자로 인터넷 사용자가 비밀번호를 제공하지 않고, 다른 웹사이트에서 자신의 정보에 대해 웹사이트

      나 애플리케이션의 접근권한을 부여할 수 있는 공통적인 수단으로 사용되는, 접근 위임을 위한 개방형 표준 (protocol) 이다. 

       

      OAuth 이전에는 외부사이트와 인증기반 데이터를 사용할 때 사용자 ID/PWD 인증방식을 사용했지 때문에 비밀번호 노출 위험이 있었다. 

      OAuth는 API 를 제공하는 서버에서 인증을 진행하고, Access Token을 발급해 3rd party에서 해당 서버의 API 를 안전하고 쉽게 사용할 수 있게 한다.

       

      현재는 OAuth 2.0 으로 많이 구현되어 있지만 1.0 과 비교해서 살펴보겠다.


      OAuth 1.0 

      - RFC 5849 에 정의되어 있다.

       

      - 주체

      User 는 사용자, Service Provider 는 인증,인가를 진행하는 서버(카카오,페이스북 등),
      Consumer 는 Service Provider 의 API 를 사용하고자 하는 제3의 서비스를 의미한다. 

       

      - 인증과정

      1. consumer 는 service provider 에게 request token 요청 

      2. service provider 가 consumer 에게 request token 응답

      3. consumer 는 user 를 service provider 에게 redirect 하고 인증절차를 진행한다.

      4. consumer 는 service provider 에게 access token을 요청 

      5. service provider 는 consumer 에게 access token를 응답

      6. consumer 는 access token 으로 service provider 의 user information 에 접근한다. 

       

       

      - 단점 

      1. 세션 고정 공격(탈취자가 생성한 세션ID 를 희생자가 사용하게 함)에 취약점 발견 (OAuth 1.0 Revision A)

      2. HMAC(keyed-hash message authentication code, hash-based message authentication code)를 통한 암호화를 하는 번거로움,
      3. 인증토큰이 만료가 되지 않아 토큰을 만료하려면 제공자 애플리케이션의 비밀번호를 바꿔야 함


      OAuth 2.0 

      - RFC 6749: The OAuth 2.0 Authorization Framework 에 정의

      - Client 서명 간소화  (Bearer 도입 + TLS)

      - 기능과 규모의 확장성 지원 (ex.scope 추가, 긴 토큰 유효 기간 - Refresh Token )

      - https 암호화로 과정을 단순화

      - 기존의 Service Provider 를 authorization server, resource server 로 분리

      - 302 redirect 웹 기반 인증 방식 -> Grant 개념 도입 

      Grant type  
      Authorization Code Grant authorization server 가 client-resource server 간 중재
      access token 을 바로 client 로 전달하지 않아 잠재적 유출 방지
      이전 방식과 동일 server 2 server
      response-type=code
      Implicit Grant OAuth1.0 과 가장 비슷한 방식
      주로 read only 인 서비스에 사용 
       js 에서 server 로 
      response_type=token
      Password Credentials Grant client 에 id/pwd 를 저장하고 이 정보로 직접 access token 받아 
      신뢰할 수 있는 client 일 때  ID, PWD 받음
      grant_type=credentails
      Client Credentials Grant credential client 인 경우 client id, secret 으로 인증 
      resource Owner 와 Client 가 동일한 경우, 복잡한 절차 없이 발행 
      grant_type=client_credentails

       

       

      - 단점

       혼합 공격에 취약점 발견


      OAuth1.0 과 2.0 차이 정리

       

      1. 용어

      OAUTH 1.0 OAUTH 2.0
      user resource owner
      consumer client
      service provider - authorization server
      - resource server
      consumer secret  
      request token  
      access token  

       

      2. 

        OAuth 1.0 OAuth 2.0
      인증방식 서명된 요청 보안 토큰
      범용성 웹 기반 애플리케이션 모바일 기기 등 다양한 플랫폼에 적용 가능
      승인 방식 두 단계 절차 더 단순한 절차
      토큰 갱신 어려움 쉽게 발급 후 갱신
      참여자 구분 - 이용자 
      - 소비자 
      - 서비스 제공자
      - 자원 소유자
      - 클라이언트
      - 권한 서버
      - 자원 서버
      토큰 접근 토큰의 유효기간 없음 접근 토큰의 유효기간 부여
      만료시 재발급 토큰 이용

       


      OAuth 2.1 

      - IETF 에서 진행 중 

      - 모든 인증 코드 부여에 대해 PKCE (Proof Key for Code Exchage)가 필요하다. (Authorization Code 방식의 확장판이다)

      - Legacy 지원 안함(Implicit, Password Credential)

       


      금융, 의료, 증권 시장 같은 보안에 민감한 클라이언트의 등장

      1.0 -> 2.0 에서 Client 의 복잡성 해소를 위한 trade off 가 있었는데, 

      Bolt-On Security 방식으로 PKCE, BCP, Device Grant 등의 방식이 추가된다. 

      2.0을 안전하게 구현하기 위해 숙지해야할 스펙이 늘어난 것이다. 

      기존의 Implicit 은 토큰 탈취가 쉽고, Resource owner password credential  사용자 정보가 가지 않는다는 플로우에서 사용자 정보를 직접적으로 받는 것 때문에 2.1 에서는 spec out 되고, 시작요청에 해시값을 보내고 완료요청에는 해시 원본을 보내는 PKCE 나, Device Grant 방식이 추가되고 Refresh Token 은 1회용으로 사용하는 등 방식이 추가되었다. 

       

       

       


      OpenId Connect 인증 계층 

      OAuth 2.0 을 기반으로, 확장형식의 인증을 추가한 spec

      OAuth 2.0 + Jwt 기반 Id Token 인증(OpenId)

      토큰 발급자, 발급 시간, 만료시간, 사용자 식별자, 토큰 사용자(Client 식별자)

       

      기존 사용자 정보 얻으려면, Authorization Token 으로 API call 해야하는데, 

      OpenId Connect 는 직접 Token 파싱해, 사용자 정보를 얻는다. 

      통신 부하를 줄이기 위해 생겼다.

       

       

       

      https://www.youtube.com/watch?v=DQFv0AxTEgM

       

       

       

      반응형
    Designed by Tistory.