OAuth 2.0 권한부여 유형(Grant Type)

Crow·2023년 1월 27일
0

InflearnOAuth2

목록 보기
8/12

OAuth 2.0 Grant Type 개요

권한 부여 유형

  • 권한부여란 클라이언트가 사용자를 대신해서 사용자의 승인하에 인가서버로 부터 권한을 부여받는 것을 의미한다.

    • 승인과정과 동의 과정은 별개의 과정으로 승인은 로그인 동의는 리소스 사용 동의 화면을 통해서 진행함
  • OAuth 2.0 메커니즘은 아래와 같은 권한 부여 유형들을 지원하고 있으며 최신 버전인 2.1버전에선 일부는 Deprecated 되었다.


  1. Authorization Code Grant Type

    • 권한 코드 부여 타입, 서버 사이드 어플리케이션(웹 어플리케이션), 보안에 가장 안전한 유형

    코드발급(해당 과정중 사용자의 승인과 동의가 필요) -> 발급 받은 코드를 이용해서 access token 발급

  2. Implicit Grant Type(Deorecated)

    • 암시적 부여 타입, 공개 클라이언트 어플리케이션 (SPA 기반 자바스크립트 앱, 모바일 앱), 보안에 취약

    공개 클라이언트라서 보안에 취약함(스크립트 자체 노출 + 토큰 역시 브라우저에 노출됨)

    하지만 Cilent_id 만 전송하는 매우 간단한 사용방식이라서 아직도 많이 사용됨

  3. Resource Owner Password Credentials Grant Type(Deprecated)

    • 리소스 사용자 비밀번호 자격증명 부여 타입, 서버 어플리케이션, 보안에 취약

    사용자의 id와 password를 이용해서 검증을 받는방식이며

    Client가 인가서버에 권한 부여 요청을 할때 클라이언트는 유저의 id와 password를 인가서버에 바로 전달해서 토큰을 발급받는다.

    이때 유저의 id와 password가 네트워크에 노출되며

    클라이언트 역시 인가서버의 사용자 계정 정보를 모두 알고있기 때문에 보안이 취약함

  4. Client Credentials Grant Type
    * 클라이언트 자격 증명 권한 부여 타입, UI or 화면이 없는 서버 어플리케이션

    클라이언트의 id와 secret만 있으면 인가 서버로부터 바로 access token을 발급받음 (클라이언트가 사용자 역활을 함 주로 데몬 & 서버 to 서버 통신)

  5. Refresh Token Grant Type

    • 새로고침 토큰 부여 타입, Authorization Code, Resource Owner Password Type 에서 지원

    Access Token엔 만료기간이 존재하고 원래라면 그게 만료가 된다면
    권한 부여절차를 다시 해야했지만

    Refresh Token을 가지고 있다면 이런 과정을 생략하고 새로운 Access Token을 발급받을수있다.
    (물론 Refresh Token 역시 만료기간이 존재한다)

    따라서 Authorization Code, Resource Owner Password Type 방식에선 Access Token을 발급받음과 동시에 Refresh Token을 발급해줌

  6. PKCE-enhanced Authorization Code Grant Type
    * PKCE 권한 코드 부여 타입, 서버 사이드 어플리케이션, 공개 클라이언트 어플리케이션

    PKCE (Proof Key for Code Exchange): 코드를 교환할때 key로 증명한다는 의미

    기존 Authorization Code Grant Type에서 코드를 발급 받을때에
    추가로 codeExchange로 해쉬(hashed)된 값을 전달해서 코드를 발급 받는다.

    이후 token을 발급받을때 역시 기존 과정에 추가로
    해쉬전 기존의 값인 codevalue와 해쉬처리를 한 algorithm 값을 같이 전달하며

    codevalue를 해당 algorithm으로 해쉬 처리한 후 코드 발급시 인가서버에 저장한 값과 일치하는지 비교 하는 과정을 추가한다.

    한마디로 특별한 값을 전달해서 해커의 공격을 차단 하는 방식이며

    서버 사이드 어플리케이션 & 공개 클라이언트 어플리케이션 할것 없이
    사용한다면 보안 취약점을 해소 할 수 있다.

권한 부여 흐름 선택 기준

해당 흐름을 보면 기밀 클라이언트는 PKCE를 사용하지 않아도 좋다고 나오지만 보안은 취약점이 발생하기 전에 예방이 우선이라고 생각하며
상황만 따라준다면 PKCE를 같이 사용하는 방식을 사용할것 같다

매개 변수 용어

Reference

https://www.inflearn.com/course/%EC%A0%95%EC%88%98%EC%9B%90-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%8B%9C%ED%81%90%EB%A6%AC%ED%8B%B0/

profile
어제보다 개발 더 잘하기 / 많이 듣고 핵심만 정리해서 말하기 / 도망가지 말기 / 깃허브 위키 내용 가져오기

1개의 댓글

comment-user-thumbnail
2023년 2월 6일

강의 정리 내용을 그대로 복사해서 필기해서 그런지 내용이 너무 딱딱하고 길어서 읽기 불편한거 같다다른사람 정리를 좀 보면서 명확하게 바꿔야 할꺼 같음

답글 달기