open:oauth-토큰

OAuth 토큰

토큰은 모든 OAuth 트랜잭션에 있어서 핵심이다. 클라이언트는 인가 서버로부터 토큰을 발급받아 보호된 리소스에 전달한다. 인가 서버는 토큰을 생성해 클라이언트에게 발급하고, 토큰을 리소스 소유자의 권한 위암과 클라이언트의 권한과 연결시켜 관리한다.

보호된 리소스는 클라이언트로부터 전달바든 토큰이 클라이언트가 요청한 작업을 수행할 수 있는 권한이 있는지 확인한다.

토큰은 권한 위임 행위의 결과를 나타낸다. 리소스 소유자, 클라이언트, 인가 서버, 보호된 리소스, 권한 범위 그리고 권한 인가 결정에 대한 그 밖의 모든 것을 나타낸다. 클라이언트가 리소스 소유자를 거치지 않고 자신의 액세스 토큰을 갱신할 때는 리프레시 토큰을 이용한다. OAuth 토큰은 OAuth의 전체 생태계에서 가장 중요한 매커니즘이며, 토큰이 없으면 OAuth도 없다고 할 수 있다.

OAuth 토큰은 OAuth 시스템에 있어서 분명 핵심적인 구성 요소다

  • OAuth 토큰은 인가 서버와 보호된 리소스가 그것을 이해할 수 만 있다면 어떤 포맷으로 만들어져도 된다.
  • OAuth 클라이언트는 토큰의 포맷을 전혀 이해할 필요가 없다
  • JWT는 토큰에 구조화된 정보를 저장하는 방법을 정의한다.
  • JOSE는 토큰의 내용을 암호학적으로 보호하는 방법을 제공한다.
  • 인트로스펙션을 통해 보호된 리소스는 토큰의 상태를 실시간으로 확인할 수 있다.
  • 클라이언트는 토큰이 발급된 이후에 해당 토큰을 폐기해 라이프사이클이 종료되도록 인가 서버에 토큰 폐기를 요청할 수 있다.

OAuth 클라이언트는 언제든지 새로운 토큰을 가져올 준비가 돼야 하기 때문에 클라이언트에게는 토큰이 누군가에 의해 폐기됐는지 여부는 중요하지 않다. 에러 응답의 내용이 토큰 폐기든, 토큰 만료든, 유효하지 않은 토큰이든 클라이언트의 응답은 항상 동일하기 때문에 OAuth 프로토콜은 에러 응답을 따로 구별하지 않는다.

하지만 보호된 리소스에게는 토큰이 폐기된 것인지, 아닌지를 아는 것이 매우 중요하다. 왜냐하면 폐기된 토큰을 받아들이면 거대한 보안 구멍이 생길 수 있기 때문이다. 거대한 보안 구멍은 일반적으로 나쁜 것으로 간주된다. 만약, 보호된 리소스가 로컬 데이터베이스를 검색하거나 실시간으로 인트로스펙션과 같은 질의를 수행한다면 토큰이 폐기된 것ㅇ니지 쉽고 빠르게 알아낼 수 있다. 하지만 JWT를 사용한다면 어떨까?

JWT는 표면상으로는 독립적이기 때문에 상태가 없는 것으로 간주된다. 외부 신호를 이용하지 않고는 보호된 리소스에게 토큰이 폐기됐다는 것을 나타낼 수 있는 방법이 없다. 인증서 기반의 공개키 구조(PKI)에서도 동일한 문제가 발생한다. 즉, 인증서의 모든 시그니처가 일치해 유효하다고 판단되는 경우 해당 인증서의 폐기를 알아내기 힘들다. OAuth에서는 토큰 인트로스펙션으로 그런 문제를 해결하듯이 인증서의 경우에는 인증서 폐기 리스트와 OCSP (Online Certificate Status Protocol)을 이용해 문제를 해결한다.


  • open/oauth-토큰.txt
  • 마지막으로 수정됨: 2020/06/02 09:25
  • 저자 127.0.0.1