보안 인증 (JWT 인증)

JWT에 대한 소개

JWT (JSON Web Tokens)는 암호화를 사용하여 데이터를 만드는 인터넷 표준 중의 하나입니다. JWT에 대한 보다 자세한 내용은 아래의 페이지를 통해 확인하시기 바랍니다.

JWT를 통한 인증하기

비밀키를 이용하여 고객사의 서버에서 JWT 문자열을 만들어 인증하는 방식입니다. 대부분의 상황에서 권장하는 방식입니다.

mplayer("init", accessKey, campaignKey, {JWT_TOKEN});

아래의 샘플 코드를 참고하시기 바랍니다.

mplayer("init", accessKey, campaignKey, jwt);
mplayer("run", "shoplivePlayer");
// example

mplayer(  
    "init",  
    "uv9CGthPzlvsInZerCw0",  
    "bf129612ef4c",  
    "eyJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJzaG9wbGl2ZSIsIm5hbWUiOiLsg7XrnbzsnbTruIwiLCJpYXQiOjE2MDg1NTE2MTksImV4cCI6MTYwODU5NDgxNX0.-VLYorRmIyDAHkOxMt7GZQeArNhTzBqAGvGEs3AICFY"
);

mplayer("run", "shoplivePlayer");

인증 토큰 생성 가이드

SHOPLIVE에서 사용하는 JWT payload는 다음과 같습니다.

데이터

설명

필수여부

샘플

expiration

만료시간 (timestamp)

필수(JWT 일때)

1516239022

userId

사용자 아이디

필수

shoplive

name

사용자 이름
(채팅창에서 사용)

필수 아님

샵라이브
이름을 지정하지 않을 경우 캠페인의 채팅 설정에 따라 채팅시 입력을 강제하도록 하거나 임의로 세팅하도록 할 수 있습니다.

gender

사용자 성별

필수 아님

빈값(미지정), m(남), f(여)

age

사용자 나이

필수 아님

custom

사용자 임의 데이터

필수 아님

최대 1KB까지 임의의 데이터를 세팅할 수 있습니다.
전체/로그인 시청자 데이터에서 확인할 수 있습니다.

userScore

사용자 등급

필수 아님

사용자 등급을 세팅하면 등급에 따른 입장 제한, 이벤트 추첨 제한 등의 기준으로 사용할 수 있습니다.
-100에서 100까지의 정수를 세팅할 수 있습니다.

profile

사용자 프로필 이미지 URL

필수 아님

방송의 채팅 목록에 프로필 이미지를 표시하는 경우 이미지 경로를 직접 설정할 수 있습니다. 권장 이미지 크기는 64px X 64px 입니다. 이미지 용량이 과도하게 커지지 않도록 주의하세요.

샘플 코드 (JWT 생성)

Java

import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
public class JwtAuthorizationGeneratorSample {
    public static void main(String[] args) {
        /*
         * 암호화 알고리즘
         * 지원하는 알고리즘은 https://jwt.io/ 혹은 https://github.com/jwtk/jjwt 사이트를 참조하세요
         */
        String algorithm = "HS256";
        /*
         * 발급 받은 base64 인코딩된 secret key
         */
        String base64EncodedSecretKey = "ckFXaWtRWENtSTA2QnpGVmxWNlBySWF4cUk1Q1pxbHU=";
        /*
         * 유효 시간을 12시간으로 설정
         */
        long expiration = System.currentTimeMillis() + 12 * (60 * 60 * 1000);
        // OR
        // long expiration = LocalDateTime.now().plus(12, ChronoUnit.HOURS).atZone(ZoneId.systemDefault()).toEpochSecond();
        /*
         * 사용자 아이디
         * 이 아이디를 기준으로 서비스 사용자를 구분하며 최대 255바이트까지 설정할 수 있습니다
         */
        String userId = "sample_user_id";
        /*
         * 채팅에 노출할 사용자명
         * 금칙어에 해당하는 단어는 별표(*)로 대체되어 표시됩니다
         */
        String name = "my_nickname";
        /*
         * 접속자 통계에서 참조할 성별 정보입니다.
         * 남성(m), 여성(f), 기타(n, null, etc.)
         */
        String gender = "f";
        /*
         * 접속자 통계에서 참조할 연령 정보입니다.
         * 임의의 숫자로 입력할 수 있으며 통계에는 5세 단위로 그룹화하여 표시합니다.
         */
        Integer age = 15;
        
        /**
         * 사용자 임의 데이터
         */
        String custom = "{\"userGrade\":\"VIP\"}";
        
        /**
         * 사용자 등급
         */
        int userScore = 34;
      
        /**
         * 사용자 프로필 이미지 URL
         */
        String profile = "https://image.shoplive.cloud/sample_profile.png";

        JwtBuilder builder = Jwts.builder()
            .signWith(SignatureAlgorithm.forName(algorithm), base64EncodedSecretKey)
            .setExpiration(new Date(expiration))
            .setIssuedAt(new Date())
            .claim("userId", userId)
            .claim("name", name)
            .claim("gender", gender)
            .claim("age", age)
            .claim("custom", custom)
            .claim("userScore", userScore)
            .claim("profile", profile);
      
        String jwt = builder.compact();
        System.out.printf("jwt: " + jwt);
    }
}
결과

jwt: eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTA1NzA1MDgsImlhdCI6MTYxMDUyNzMwOCwidXNlcklkIjoic2FtcGxlX3VzZXJfaWQiLCJuYW1lIjoibXlfbmlja25hbWUiLCJnZW5kZXIiOiJmIiwiYWdlIjoxNX0.0Z5YUo99149fIFyfqwxa-7SLyqC0RHR1T8P7jZLhpG8

📘

Java 이외의 다른 프로그래밍 언어를 통해 JWT 생성하고 인증을 구현하고자 할 경우 SHOPLIVE 담당자에 문의하여 지원을 받을 수 있습니다.


Did this page help you?