액세스 토큰
액세스 토큰(access token)은 애플리케이션이 PlanetKit을 사용할 수 있게 해주는 단기(short-lived) 토큰입니다. 앱 서버가 액세스 토큰을 만들어 반환합니다.
액세스 토큰 인증 흐름
액세스 토큰을 사용한 인증 흐름은 다음과 같습니다.
- 앱 클라이언트는 애플리케이션에서 정의한 통신 채널을 이용해 앱 서버에 액세스 토큰을 요청합니다. 이 채널은 LINE Planet에서 제공하지 않습니다.
- 앱 서버는 액세스 토큰을 생성하여 앱 클라이언트에게 보냅니다.
- 앱 클라이언트는 액세스 토큰으로 통화 파라미터 또는 컨퍼런스 파라미터를 초기화하여 PlanetKit에 액세스 토큰을 설정합니다.
- 앱 클라이언트는 통화 파라미터를 사용하여 1대1 통화를 생성하거나, 컨퍼런스 파라미터를 사용하여 그룹 통화에 참여합니다.
다음 다이어그램은 액세스 토큰을 사용한 인증 흐름을 보여 줍니다.
액세스 토큰 형식
액세스 토큰은 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 | 서비스 ID | YOUR_SERVICE_ID |
uid | 사용자 ID | 1122 |
iss | API 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 라이브러리를 참고하세요.