アクセストークン
アクセストークン(access token)は、アプリケーションがPlanetKitを使用する際に必要な短期(short-lived)トークンです。アプリサーバーがアクセストークンを作成した後、返却します。
アクセストークンの認証の流れ
アクセストークンによる認証の流れは、次のとおりです。
- アプリクライアントは、アプリケーションで定義した通信チャネルを利用して、アプリサーバーにアクセストークンをリクエストします。このチャネルは、LINE Planetでは提供しません。
- アプリサーバーは、アクセストークンを作成し、アプリクライアントに送信します。
- アプリクライアントは、アクセストークンを使用して通話パラメーターまたはカンファレンスパラメーターを初期化し、PlanetKitにアクセストークンを設定します。
- アプリクライアントは、通話パラメーターを使用して1対1通話を作成します。あるいはカンファレンスパラメーターを使用してグループ通話に参加します。
下図にて、アクセストークンによる認証の流れを示します。
アクセストークンの形式
アクセストークンは、JSON WebToken(JWT)です。JWTとは、ヘッダーおよびペイロード、署名からなるエンコードされたJSONオブジェクトです。
# JWT example
eyJ*****************.eyJ*********.*******************************************
ヘッダー
通常の場合、ヘッダーは2つの部分で構成されます。
- トークンタイプ(
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ライブラリを参照してください。