LG U+ CDN 사용 설명서
  • CDN 서비스 소개
  • OTP 로그인 방식 안내
  • 통계
    • Dashboard
    • Traffic
    • Visitor
    • Location
    • Contents
    • Authentication
  • CDN 관리
    • Service
    • Mailing
    • Purge
    • Diagnostics
    • Account
  • 콘텐츠 접근 인증
    • 접근 인증
    • 보안 토큰
    • 토큰 생성 예제
  • Open API 토큰 생성
    • CDN3.0 v3
      • Postman 토큰 생성
      • Curl 토큰 생성
    • CDN3.0 v2
      • Postman 토큰 생성
      • Curl 토큰 생성
  • 문제 해결
    • Tech Support
  • 용어 설명
Powered by GitBook
On this page
  • JWT(Json Web Token)
  • 전달 방법
  • 구조와 생성
  • JOSE(JSON Object Signing and Encryption) 헤더
  • 페이로드(Playload)
  • 서명(Signature)
  • 서명에 대한 예시
  1. 콘텐츠 접근 인증

보안 토큰

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

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

JWT(Json Web Token)

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) 세 부분으로 구성되어 있습니다.

<토큰 생성 예제>

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 서비스에서 지원합니다.

  • 재생 시간(초)

<스트리밍 서비스>

서명(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

)

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

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

토큰 생성 예제
http://jwt.io
https://tools.ietf.org/html/rfc7519
Signing. (출처: http://100bytes.com/tutorials/security/jwt/json-web-signature)
프로토콜에 따른 전달 방법
가상 파일(Virtual file)