보안 토큰
Was this helpful?
Was this helpful?
CDN 서비스 에서는 인증 방법으로 보안 토큰을 사용합니다. 본 장에서는 클레임(Claim) 기반의 JWT(Json Web Token)를 사용하여 보안 토큰을 생성하고, 전달하는 방법에 대해 설명합니다.
보안 토큰에 정의되어 있는 개별 정보를 클레임(Claim)이라고 부르며, 클레임 이름(Claim Name)과 클레임 값(Claim Value)이 key-value 쌍으로 구성되어 있습니다.
JWT는 JSON 형식으로 기술한 클레임 기반의 데이터 전송 표준 규약입니다. 자세한 설명은 아래 사이트를 참고하시길 바랍니다.
참고사이트
에서는 웹 페이지에서 토큰을 생성∙검증할 수 있고, 개발 언어 별 라이브러리 정보를 제공합니다.
보안 토큰은 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) 세 부분으로 구성되어 있습니다.
헤더는 토큰을 어떻게 해석해야 하는지 명시한 부분으로 알고리즘과 데이터 타입을 정의합니다.
alg
서명(Signature) 생성시에 사용한 알고리즘을 정의.
HS256
현재는 SHA-256 알고리즘만 지원합니다.
typ
클레임의 표현 형식을 정의.
JWT
현재 는 JWT 형식만 지원합니다.
페이로드가 포함하고 있는 모든 클레임을 클레임 셋(Claim Set)이라고 부릅니다.
exp
만료 시간(Expiration Time)
만료시간
path
클레임의 표현 형식을 정의.
인증 경로(Path)
상대 경로(/)를 포함한 디렉터리 또는, 콘텐트 파일의 실제 경로를 의미합니다. 인증 경로가 디렉터리 일 경우에는 하위 경로에 대한 접근 권한도 포함합니다.
playstart
재생 시작 시간(초)으로 VOD 서비스에서만 지원합니다.
재생 시작 시간(초)
duration
재생 시간(초)으로 라이브, VOD 서비스에서 지원합니다.
재생 시간(초)
토큰은 헤더와 페이로드를 위∙변조 할 수 없도록 반드시 보안-키(Secure Key)를 사용하여 SHA-256 알고리즘으로 서명해야 합니다.
비밀 키(Secret Key)라고도 불리며, CDN과 콘텐트 제공자(Content Provider)간의 보안 채널을 생성하기 위해서 미리 공유하는 키입니다.
아래는 서명 방법을 예시를 통해 설명합니다.
헤더와 페이로드를 각각 BASE64로 인코딩(Encoding)합니다.
헤더
{
"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
)
JWT 라이브러리(Java, PHP)를 사용하여 토큰을 생성하는 방법은 아래 “”를 참고하세요.
스트리밍 서비스는 인증 경로에 가상 파일을 포함하지 않도록 주의해야 합니다. 가상 파일에 대한 설명은 부록 부록의 “”을 참고하세요.