보안 토큰

CDN 서비스 에서는 인증 방법으로 보안 토큰을 사용합니다. 본 장에서는 클레임(Claim) 기반의 JWT(Json Web Token)를 사용하여 보안 토큰을 생성하고, 전달하는 방법에 대해 설명합니다.

보안 토큰에 정의되어 있는 개별 정보를 클레임(Claim)이라고 부르며, 클레임 이름(Claim Name)과 클레임 값(Claim Value)이 key-value 쌍으로 구성되어 있습니다.

JWT(Json Web Token)

JWT는 JSON 형식으로 기술한 클레임 기반의 데이터 전송 표준 규약입니다. 자세한 설명은 아래 사이트를 참고하시길 바랍니다.

  • 참고사이트

http://jwt.io 에서는 웹 페이지에서 토큰을 생성∙검증할 수 있고, 개발 언어 별 라이브러리 정보를 제공합니다.

전달 방법

보안 토큰은 HTTP 쿼리 파라미터로 전달되고, 만료 시간(exp), 인증 경로(path) 등의 정보를 포함하고 있습니다. 아래는 인증 URL에 대한 예시입니다.

<스트리밍 서비스>

스트리밍 서비스에서의 전달 방법은 부록 “프로토콜에 따른 전달 방법” 절을 참고하시길 바랍니다.

기본적인 인증 URL의 예.

  • 콘텐트 경로: /foo/sample.mp4

  • 보안 토큰: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOiIxNDM0MjkwNDAwMDAwIiwicGF0aCI6Ii9mb28vc2FtcGxlLm1wNCJ9.mPYgbzchlBCu_yHjuCdbTxX9egIWD43TKG-49lhb9l4

  • 만료시간(exp): 1234567890

  • 인증 경로(path): /foo/sample.mp4

http://vod.solbox.com/foo/sample.mp4?token= eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOiIxNDM0MjkwNDAwMDAwIiwicGF0aCI6Ii9mb28vc2FtcGxlLm1wNCJ9.mPYgbzchlBCu_yHjuCdbTxX9egIWD43TKG-49lhb9l4

구조와 생성

보안 토큰의 구조는 헤더(Header), 페이로드(Payload), 서명(Signature) 세 부분으로 구성되어 있습니다.

<토큰 생성 예제>

JWT 라이브러리(Java, PHP)를 사용하여 토큰을 생성하는 방법은 아래 “토큰 생성 예제”를 참고하세요.

JOSE(JSON Object Signing and Encryption) 헤더

헤더는 토큰을 어떻게 해석해야 하는지 명시한 부분으로 알고리즘과 데이터 타입을 정의합니다.

{
    "alg": "HS256",
    "typ": "JWT"
}
Key설명Value

alg

서명(Signature) 생성시에 사용한 알고리즘을 정의.

  • HS256

    • 현재는 SHA-256 알고리즘만 지원합니다.

typ

클레임의 표현 형식을 정의.

  • JWT

    • 현재 는 JWT 형식만 지원합니다.

페이로드(Playload)

페이로드가 포함하고 있는 모든 클레임을 클레임 셋(Claim Set)이라고 부릅니다.

{
    "exp": 1434290400000,
    "path":"/foo/sample.mp4",
    "playstart": 0,
    "duration": 180
}
Key설명Value

exp

만료 시간(Expiration Time)

  • 만료시간

path

클레임의 표현 형식을 정의.

  • 인증 경로(Path)

    • 상대 경로(/)를 포함한 디렉터리 또는, 콘텐트 파일의 실제 경로를 의미합니다. 인증 경로가 디렉터리 일 경우에는 하위 경로에 대한 접근 권한도 포함합니다.

playstart

재생 시작 시간(초)으로 VOD 서비스에서만 지원합니다.

  • 재생 시작 시간(초)

duration

재생 시간(초)으로 라이브, VOD 서비스에서 지원합니다.

  • 재생 시간(초)

<스트리밍 서비스>

스트리밍 서비스는 인증 경로에 가상 파일을 포함하지 않도록 주의해야 합니다. 가상 파일에 대한 설명은 부록 부록의 “가상 파일(Virtual file)”을 참고하세요.

서명(Signature)

토큰은 헤더와 페이로드를 위∙변조 할 수 없도록 반드시 보안-키(Secure Key)를 사용하여 SHA-256 알고리즘으로 서명해야 합니다.

<보안-키>

비밀 키(Secret Key)라고도 불리며, CDN과 콘텐트 제공자(Content Provider)간의 보안 채널을 생성하기 위해서 미리 공유하는 키입니다.

서명에 대한 예시

아래는 서명 방법을 예시를 통해 설명합니다.

  • 헤더와 페이로드를 각각 BASE64로 인코딩(Encoding)합니다.

데이터문자열BASE64 인코딩

헤더

{

"alg": "HS256",

"typ": "JWT"

}

eyJhbGciOiJIUzI1NiIsInR5cCI6Ikp

XVCJ9

페이로드

{

"exp": "1434290400000",

"path": /foo/sample.mp4"

}

eyJleHAiOiIxNDM0MjkwNDAwMDAwIiw

icGF0aCI6Ii9mb28vc2FtcGxlLm1wNC

J9

BASE64 인코딩 문자열은 URL-Safe를 보장하고, 패딩(padding)은 제거해야 합니다.

  • 마침표(.)를 구분 자로 사용하여 헤더와 페이로드를 연결합니다.

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.

eyJleHAiOiIxNDM0MjkwNDAwMDAwIiwicGF0aCI6Ii9mb28vc2FtcGxlLm1wNCJ9

  • 마지막으로 위의 문자열을 보안-키(Secure key)와 함께 SHA-256 알고리즘으로 해시 값을 추출합니다.

HMACSHA256(

“eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOiIxNDM0MjkwNDAwMDAwIiwicGF0aCI6Ii9mb28vc2FtcGxlLm1wNCJ9”,

Secure Key

)

Last updated