Bearer 인증
Authorization server backend

서버를 구현하다보면 어떤 요청에 대해서는 인증(Authorization)이 필요한 경우가 있습니다.
예를 들면 게시판에 내가 쓴 글을 수정하기 위해서는 내가 ‘내’가 맞는지 확인이 필요합니다.
이런 경우 클라이언트에서 요청을 보낼 때 헤더에 인증에 필요한 정보를 담아 보내고
서버는 이 정보가 맞는 지 확인하고 그에 맞게 응답해줘야 합니다.
이때 사용할 수 있는 인증 정보가 바로 Bearer 토큰 입니다.

Bearer 인증이란?

Bearer 인증은 토큰 인증 방식입니다. “Bearer”은 소유자라는 뜻으로 토큰의 소유자에게 권한을 부여해주라는 의미로 이름을 붙여줬다고 합니다. Bearer 와 토큰을 인증 헤더에 입력하는 방식으로 인증이 이루어집니다. 더 자세한 내용은 RFC 6750를 참고하세요.

Bearer [token]

Bearer 토큰은 불투명한(Opaque) 문자열이 사용됩니다. 토큰의 형태는 인증 서버에서 정의하기 나름인데, 16진수의 문자열을 사용하기도 하고 JSON Web Token(JWT)을 사용하기도 합니다. 중요한 것은 Bearer 토큰은 클라이언트가 해석할 수 없는 형태여야 하고, 사용자의 정보를 직접적으로 전달하면 안됩니다. 대신 서버에서 클라이언트의 권한을 확인할 수 있는 메타데이터가 토큰에 인코딩되어 있어야 하며 보안을 위해 충분히 복잡한 알고리즘을 사용해서 발급해야 합니다.

Bearer 인증의 장점 및 단점

Bearer 인증은 안전하고, 확장이 쉽다는 장점이 있습니다.

Bearer 토큰은 쉽게 복호화 할 수 없고 서버에서 토큰의 리소스 접근 권한을 쉽게 철회할 수도 있습니다. 또한 토큰의 유효기간을 설정할 수 있어서 안전하게 리소스를 보호할 수 있습니다.

Bearer 토큰 자체가 메타데이터를 가지고 있어서 서버는 토큰을 발급만 하고 보관할 필요가 없습니다. 사용자가 아무리 많아도 토큰을 검증하는 과정은 같은 시간이 소요됩니다. 게다가 여러 서비스 및 서버 간에 토큰을 공유할 수 있어서 사용자에게 편리한 경험을 제공할 수 있습니다.

반면 단점은 Bearer 인증은 보안 측면에서 문제가 있을 수 있습니다.

만약 Bearer 토큰이 외부에 노출되면 다른 서비스도 토큰으로 바로 리소스에 접근할 수 있습니다. 하지만 서버가 보안 장치를 잘 구축하면 문제가 없고, 노출이 발견되면 해당 토큰의 권한을 철회할 수 있습니다.

-end-