본문으로 건너뛰기

액세스 토큰

액세스 토큰(access token)은 애플리케이션이 PlanetKit을 사용할 수 있게 해주는 단기(short-lived) 토큰입니다. 앱 서버가 액세스 토큰을 만들어 반환합니다.

액세스 토큰 인증 흐름​

액세스 토큰을 사용한 인증 흐름은 다음과 같습니다.

  1. 앱 클라이언트는 애플리케이션에서 정의한 통신 채널을 이용해 앱 서버에 액세스 토큰을 요청합니다. 이 채널은 LINE Planet에서 제공하지 않습니다.
  2. 앱 서버는 액세스 토큰을 생성하여 앱 클라이언트에게 보냅니다.
  3. 앱 클라이언트는 액세스 토큰으로 통화 파라미터 또는 컨퍼런스 파라미터를 초기화하여 PlanetKit에 액세스 토큰을 설정합니다.
  4. 앱 클라이언트는 통화 파라미터를 사용하여 1대1 통화를 생성하거나, 컨퍼런스 파라미터를 사용하여 그룹 통화에 참여합니다.

다음 다이어그램은 액세스 토큰을 사용한 인증 흐름을 보여 줍니다.

Access token flow

액세스 토큰 형식​

액세스 토큰은 JSON WebToken(이하 JWT)입니다. JWT란 헤더와 페이로드, 서명으로 이루어진 인코딩된 JSON 객체입니다.

# JWT example
eyJ*****************.eyJ*********.*******************************************

헤더​

헤더는 보통 두 부분으로 구성됩니다.

  • 토큰 유형(typ): JWT
  • 서명 알고리즘(alg): HS256
# Header example
# eyJ*********************************
{
"typ": "JWT",
"alg": "HS256"
}

페이로드​

# Payload example
# eyJ*****************************************************************************************************************************************************************************************************************************************************
{
"sub": "YOUR_SERVICE_ID",
"uid": "2048",
"iss": "YOUR_API_KEY",
"iat": 1617636530
}

서명​

서명 부분은 JSON 객체가 아닙니다. 서명 부분을 생성할 때 API secret을 사용합니다.

# Signature example
# *********-*********-***********************
HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), API-secret)

액세스 토큰 생성 방법​

전제 조건​

액세스 토큰을 생성하려면 API key와 API secret이 있어야 합니다. API key 생성하기를 참고해 생성하세요.

액세스 토큰 생성​

액세스 토큰 생성은 앱 서버가 담당합니다.

Note

앱 클라이언트가 액세스 토큰을 생성하면 안 됩니다.

위에서 언급한 것처럼 JWT란 헤더와 페이로드, 서명으로 이루어진 인코딩된 JSON 객체입니다. 액세스 토큰을 생성하려면 각 부분에 적절한 값을 설정해야 합니다. 어떤 값을 사용해야 하는지는 아래 표에서 볼 수 있습니다.

JWT 헤더설명값
typ토큰 유형. "JWT"여야 합니다.JWT
alg서명 알고리즘. HS256를 사용해야 합니다.HS256
JWT 페이로드설명예
sub서비스 IDYOUR_SERVICE_ID
uid사용자 ID1122
issAPI key****************************
iat생성 시각 (초 단위)1615740516
Note

액세스 토큰 크기가 늘어나는 것을 방지하려면, 위 JWT 파라미터 외에 다른 페이로드 값을 추가하지 않도록 하세요.

액세스 토큰 생성 예제 코드(Java)​

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;

public class AccessTokenGenerator {
public static void main(String[] args) {
String serviceId = "YOUR_SERVICE_ID";
String userId = "2048";
String apiKey = "YOUR_API_KEY";
String apiSecret = "YOUR_API_SECRET";

Map<String, Object> header = new HashMap<>();
header.put("typ", "JWT");

Date issuedAt = new Date(System.currentTimeMillis());

Algorithm algo = Algorithm.HMAC256(apiSecret);
String token = JWT.create()
//header
.withHeader(header)
//payload
.withSubject(serviceId)
.withIssuer(apiKey)
.withIssuedAt(issuedAt)
.withClaim("uid", userId)
//signature
.sign(algo);

System.out.println(token);
// eyJ*********************************.eyJ****************************************************************************************************************.***********-*******************************
}
}

다른 프로그래밍 언어 예제를 보고 싶으면 JWT 라이브러리를 참고하세요.