ユーザーの認証を行う
このドキュメントは、identifyイベント実行時のなりすましを防止するための「本人確認機能」の実装手順を説明するものです。
本機能では、貴社サーバーで発行したIDトークン (JWT) をidentifyイベントに付与することで、リクエストの正当性をKARTEサーバーで検証します。
実装手順
IDトークンを発行する
はじめに、ユーザーごとのIDトークン(JWT)を発行する処理を貴社サーバーに実装します。
1. ライブラリの選定と準備
JWTの生成には、信頼できる標準的なライブラリを使用してください。
2. 秘密鍵の安全な管理
IDトークンの署名に利用する秘密鍵 (Secret Key) は、弊社から提供されたものを利用します。
なお秘密鍵は [組織・プロジェクト設定] - [セキュリティ設定] - [シークレットキー] から取得してください。
秘密鍵の管理について秘密鍵は、環境変数やAWS Secrets Managerなどのシークレット管理サービスを用いて、コードベースから分離された安全な場所に保管してください。
3. IDトークン(JWT)の仕様
生成するJWTは、以下の仕様を満たす必要があります。
クレーム | 説明 | データ型 | 必須 |
---|---|---|---|
alg (Header) | 署名アルゴリズム。 HS256 をハードコードで指定してください。 | String | ✅ |
sub (Payload) | ユーザーを一意に特定するuser_id。 | String | ✅ |
exp (Payload) | トークンの有効期限。 発行から30〜60秒後のUnixタイムスタンプ(秒)を強く推奨。 | Number | ✅ |
4. 実装例
以下に、auth0/java-jwtライブラリを使用したIDトークン発行処理の実装例を示します。
import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
public class IdentityTokenService {
private final Algorithm algorithm;
/**
* コンストラクタで秘密鍵を読み込み、アルゴリズムを初期化する
* @param secretKey 環境変数などから読み込んだ秘密鍵
*/
public IdentityTokenService(String secretKey) {
this.algorithm = Algorithm.HMAC256(secretKey);
}
/**
* 指定されたユーザーIDのIDトークンを生成する
* @param userId ログイン中のユーザーID
* @return 生成されたIDトークン (JWT文字列)
*/
public String generateToken(String userId) {
Instant now = Instant.now();
Instant expiresAt = now.plus(30, ChronoUnit.SECONDS); // 30秒後に失効
String token = JWT.create()
.withSubject(userId)
.withExpiresAt(expiresAt)
.sign(this.algorithm);
return token;
}
}
IDトークンを付与する
次に、クライアントサイドから先ほど発行したIDトークンを取得して、identifyイベントのオプションとして渡します。
krt('send', 'identify', {
user_id: 'ユーザーID',
}, {
jwt: 'IDトークン',
});
Tracker.identify("ユーザーID", [
"jwt": "IDトークン"
])
Tracker.identify("ユーザーID", mapOf(
"jwt" to "IDトークン"
))
Updated about 2 hours ago