userTokenの利用
認証済みユーザーの状態を Reselfit Plugin に安全に共有する方法
userToken とは
userToken は Reselfit Plugin に「このユーザーは誰か」を安全に伝えるための短命 JWT です。
userId をそのまま HTML に置く運用だと改ざん・なりすましを防げないため、本番環境では userToken をセットする運用を強く推奨します。
管理コンソールで署名シークレットを発行
Reselfit 管理コンソールの セキュリティ > userToken 署名シークレット では、コンソールから userToken 証明シークレットをいつでも発行できます。以下の情報が表示されるので、コピーして自社バックエンドへ登録してください。
- シークレット: userToken の署名に利用する HS256 用シークレット。
- kid: シークレットを識別するキー ID。シークレットをローテーションするときの差し替え管理が容易になります。
注意:
userTokenの証明処理は必ずサーバーサイドで実行し、userToken 署名シークレットは安全に保管してクライアントコードから参照されないようにしてください。
1 アカウントで複数のシークレットを同時に管理でき、不要になったものは無効化(または削除)してください。kid の設定は任意ですが、管理コンソールでも kid 単位で一覧・無効化できるため、kid 付きで管理するとシークレットの切り替えが安全に行えます。
サーバーで userId を JWT に変換する
シークレットは必ずサーバーサイドだけに置き、userId を JWT に変換して userToken としてフロントエンドへ渡します。以下はnodejs環境で jose を使ったサンプルです。
import { SignJWT } from 'jose'
const secretKey = new TextEncoder().encode(process.env.USER_TOKEN_SECRET)
const kid = process.env.USER_TOKEN_KID // 任意だが設定を推奨
export async function issueUserToken(userId: string) {
return await new SignJWT({ user_id: userId })
.setProtectedHeader({ alg: 'HS256', kid: kid || undefined })
.setIssuedAt()
.setExpirationTime('1h')
.sign(secretKey)
}- kid を設定できない事情がある場合でも署名は実行できますが、ローテーションのたびに利用者へ影響が出るため可能な限り kid も同梱してください。
- 有効期限は 1 時間以内を推奨します(短すぎると毎回再発行が必要になるため、ユースケースに応じて数分〜数時間で調整)。
- 署名済み token はユーザーごとに最新のものを配布し、無効化した token を使い回さないようにしてください。
userTokenの設置例
HTML の埋め込み設定で userId / userToken を設定する
reselfit-plugin-script-config の JSON で渡す場合は以下のように設定します。
<script type="application/json" id="reselfit-plugin-script-config">
{
"item": {
...
},
"userId": "{YOUR_USER_ID}",
"userToken": "{YOUR_USER_IDをjwt証明した値}"
}
</script>実際の例
<script type="application/json" id="reselfit-plugin-script-config">
{
"item": {
...
},
"userId": "demo-user-001",
"userToken": "eyJhbGciOiJIUzI1NiIsImtpZCI6InN0a25fc29vYjc3NzZybHVlM2J4ZzRjNHR6azIzIn0.eyJ1c2VyX2lkIjoiZGVtby11c2VyLTAwMSIsImV4cCI6MTc2NTU0MjQ1OH0.YUh1ha2K5OP9PJoLxceSS3pT_AlzlrLYVgQEiQ7GmGk"
}
</script>Playground は HS256 シークレットを直接入力して試せるデモですが、本番でもバックエンド経由で署名する運用を推奨します。userToken が失効した場合はバックエンド経由で再発行し、reselfit-plugin-script-config の JSON を更新してから Plugin を再初期化します。
'boot' JavaScript API で userId / userToken を設定する
boot JavaScript APIので以下のように設定することで、boot時に userId, userTokenを設定できます。
<script>
window.Reselfit('boot', {
userId: "{YOUR_USER_ID}",
userToken: "{YOUR_USER_IDをjwt証明した値}"
})
</script>実際の例
<script>
window.Reselfit('boot', {
userId: "demo-user-001",
userToken: "eyJhbGciOiJIUzI1NiIsImtpZCI6InN0a25fc29vYjc3NzZybHVlM2J4ZzRjNHR6azIzIn0.eyJ1c2VyX2lkIjoiZGVtby11c2VyLTAwMSIsImV4cCI6MTc2NTU0MjQ1OH0.YUh1ha2K5OP9PJoLxceSS3pT_AlzlrLYVgQEiQ7GmGk"
})
</script>