このドキュメントでは、Member Hash(以下、メンバーハッシュ)について解説します。
メンバーハッシュ(Member Hash)は、顧客のmemberIdをHMAC-SHA256を用いて暗号化し、適切なユーザーのブートリクエストのみを許可する機能です。セキュリティ強化のため、メンバーハッシュ機能の使用を強く推奨します。
bootに使用するmemberIdは各顧客を識別でき、固有の値である必要があるため、多くの顧客企業ではサービスのIDやメールアドレスなどの情報を使用しています。しかし、このように推測されやすい情報をmemberIdとして使用すると、第三者も容易に他の顧客のmemberIdを推測できるようになります。この場合、第三者が他の顧客の情報を利用してブートし、顧客の電話番号やチャット記録などの機密情報を奪取する可能性があります。
メンバーハッシュ機能は、SDKを直接インストールした自社開発サイトと、一部のビルダープロバイダー(Cafe24、WordPress)で利用できます。一般的にビルダープロバイダーは連携方式に差異があるため、セキュリティ設定が困難です。設定可能な一部のビルダープロバイダーについては、準備中です。
[チャネル設定] - [セキュリティ・開発] - [セキュリティ] をクリックします。
[メンバーハッシュ機能] に新しいシークレットキーが表示されます。
発行されたシークレットキーでHMAC-SHA256を使用し、ユーザーのmemberIdをハッシュするように設定します。
メンバーハッシュを生成する主体は、シークレットキーを安全に保管できる必要があります
シークレットキーはクライアントがアクセスできない場所に保管する必要がありmす。クライアントがmemberIdからメンバーハッシュを生成する責任を負う場合、悪意のあるユーザーがシークレットキーを使用してメンバーハッシュを生成しようとする可能性があります。シークレットキーが一般公開されない場所(例:バックエンドサーバー)でメンバーハッシュを生成し、シークレットキーを露出せずに生成されたメンバーハッシュをクライアントに送信することを推奨します。
以下に、4つの言語(JavaScript、Python、Java、PHP)でmemberIdをハッシュ化する例を示します。
memberId:ユーザーの識別可能な識別子(id)
secretKey:使用するチャネルで発行されたシークレットキー
expectedHash:シークレットキーを用いてエンコードされたmemberIdの期待値
$expectedHash = hash_hmac('sha256', 'lucas', pack("H*", '4629de5def93d6a2abea6afa9bd5476d9c6cbc04223f9a2f7e517b535dde3e25'));
// $expectedHash = '99427c7bba36a6902c5fd6383f2fb0214d19b81023296b4bd6b9e024836afea2';メンバーユーザーとしてbootする場合
bootリクエスト時には、ユーザーのmemberIdとハッシュ化された値の両方を提供する必要があります。チャネルは、このメンバーハッシュがHMAC-SHA256を通じて正常に生成された値かどうかをチェックします。チェック後、期待した値でない場合、レスポンスは
BootStatusとして「未認証エラー」を返します。匿名ユーザーとしてbootする場合
memberIdとmemberHashの値を空にした状態でbootします。
bootConfig内のmemberHash値は無視されます。検証プロセスはすべてスキップされます。
シークレットキーは、[チャネル設定] - [セキュリティ・開発] - [メンバーハッシュ機能] - [シークレットキー] で確認できます。
テキストフィールドの右側にある更新ボタンでシークレットキーを再発行できます。
[ハッシュ検証テストを行う] により、メンバーハッシュ値が指定されたシークレットキーで適切にエンコードされた値かを検証できます。
メンバーハッシュ機能は、チャネルトークSDKの設定をすべて完了した後に有効化する必要があります。インストールが完了していない状態で機能を有効化すると、チャネルトークSDKが動作しない場合があります。
シークレットキーが漏洩した場合は、クイックスタートを参照して失効処理を行なってください。