Authorization Code 사용 유무에 따른 보안성 차이

wish17·2023년 3월 22일
0
post-thumbnail

Authorization Code Grant(권한 부여 승인 코드 방식)과 Implicit Grant(암묵적 승인 방식)의 차이점

Authorization Code Grant : 권한 부여 승인 코드 방식

Implicit Grant : 암묵적 승인 방식

위 그림에서 알 수 있듯 Authorization Code를 사용하냐 안하냐의 차이점이 있다.

이로 인해 보안성의 차이점이 생긴다는데 왜 그럴까?

Authorization Code 사용 유무에 따른 보안성 차이

Authorization Code 타입에서 authorization code를 사용하면, 사용자의 브라우저와 클라이언트 사이에 존재하는 중간 공격자가 authorization code를 훔쳐가더라도 access token을 얻을 수 없으며 훔치기도 어렵다.

그 이유는 아래와 같다.

  1. authorization code는 클라이언트와 인증 서버 사이에서만 사용된다.
    인증 서버는 authorization code를 발급할 때, 이를 클라이언트에게 보내지만, 사용자의 브라우저는 이 코드를 읽을 수 없다. 따라서 중간 공격자가 사용자의 브라우저를 통해 authorization code를 훔치더라도, 이를 이용하여 access token을 얻을 수 없다.

  2. authorization code는 한 번만 사용할 수 있다.
    authorization code를 이용하여 access token을 발급받으면, 이 authorization code는 폐기된다. 따라서 중간 공격자가 authorization code를 훔쳐가더라도, 이미 사용된 코드이기 때문에 access token을 얻을 수 없다.

  3. 인증 서버와 클라이언트는 HTTPS를 사용하여 통신한다.
    HTTPS는 데이터 전송 과정에서 암호화를 수행하여 중간 공격자가 정보를 빼낼 수 없도록 보호한다. 따라서 사용자의 브라우저와 클라이언트 사이에서 authorization code를 훔치는 공격은 불가능하다.

반면에 access token은 위와 마찬가지로 클라이언트에게 전달되기는 하지만 중간 공격자가 이를 가로채서 훔쳐갈 수 있다.

  • 중간자 공격(man-in-the-middle attack) 등의 방법을 통해 훔칠 수 있다.

  • access token은 브라우저에서 읽을 수 있다. (즉, 훔치면 써먹을 수 있다.)

초간단 요약

authorization code를 이용하면 브라우저에서 읽을 수 없기 때문에 강탈당해도 제3자가 사용 못할 뿐더러 훔치는게 불가능하다.

하지만 authorization code를 사용 안하고 access token을 바로 주고 받으면 access token은 훔칠 수 있는 방법도 존재하고 제3자가 훔치는데 성공하면 읽을 수 있기 때문에 사용당할 수 있다.

물론 HTTPS 프로토콜을 사용하는 등의 방법으로 못훔치게하거나 Token의 만료기간을 짧게 설정해 보안이슈를 방지할 수 있다.

0개의 댓글