概要
OneSignalは、ユーザーのなりすましを防ぐのに役立つアイデンティティ検証という拡張セキュリティ機能を提供しています。この機能は、サーバー上で安全に生成されたJSON Web Token(JWT)を利用します。サブスクリプション情報を検証するために、これらのトークンがアプリとOneSignalのAPIに渡されます。 アイデンティティ検証を有効にして保護する:- ユーザーのログイン
- メールサブスクリプションの追加
- SMSサブスクリプションの追加
- ユーザーアイデンティティの変更
前提条件
- プッシュプラットフォームが構成された既存のOneSignalアプリ。
- サポートされているSDKの1つと統合されたモバイルアプリ:
ラッパーSDKサポート(Flutter、React Native、Unityなど)は近日公開予定です。
セットアップ
新しいキーを生成する
OneSignalアカウントにログインし、設定 > キーとID > アイデンティティ検証に移動します。
新しいキーを生成をクリックして、新しいキーペアを作成します。
PEMファイルをダウンロードするか、秘密鍵をコピーし、秘密鍵を安全に保管してください。



バックエンドで検証JWTを生成する
アイデンティティ検証では、OneSignalにログインする前に、認証サーバーでエンドユーザーを認証する必要があります。エンドユーザーがバックエンドで認証するときに、トークンを生成し、デバイスへの認証レスポンスに含めます。アプリがバックエンドサーバーを実行していない場合は、ユーザーを検証してこれらのトークンを生成するための軽量サーバーのセットアップを検討してください。秘密鍵は、ダッシュボードからダウンロードした前のステップのファイルにあります。次のようなレスポンスを受け取るはずです:JWT値をjwt.ioに貼り付け、デコードされたペイロードに次のパラメーターが含まれていることを確認します:次のステップに進む前に、以下を確認してください:
JWTペイロード
JWTには次のプロパティを含めることができます:OneSignalアプリID
トークンの有効期限。
ユーザーのエイリアス。
subscriptions
ユーザーにメールおよびSMSサブスクリプションを追加する場合にのみ必要です。
JWTへの署名
ES256アルゴリズムを使用してJWTに署名します。JWTをOneSignalに送信するときに検証の問題を回避するために、バックエンドがこの署名方法を使用するように構成されていることを確認してください。これにはJWTライブラリを使用することをお勧めします。jsonwebtokenを使用した例:JWT を確認する
SDKと統合する前に、サーバーを起動してエンドポイントを呼び出すことで、JWTが正しく生成されていることを確認します:issが 設定 > キーとID の OneSignal アプリIDと一致しているidentity.external_idが存在し、OneSignal.login()に渡す値と一致しているexpが将来のタイムスタンプである — 期限切れのトークンはOneSignalに拒否されます
サブスクリプションを含める
理想的には、ユーザーのログイン時に、メールアドレスや電話番号などのサブスクリプションの詳細をJWTペイロードに含めます。これらの詳細が事前に利用できない場合、検証サーバーは、サブスクリプション情報が利用可能になったときに動的にトークンを生成するエンドポイントを提供する必要があります。例:サブスクリプションを追加するためのJWTの生成`login`メソッドにJWTを渡す
バックエンドがJWTを生成したら、それを使用して
loginメソッドを呼び出します。このトークンは、メールやSMSサブスクリプションの追加などの変更を行う前に、ユーザーのアイデンティティが検証されることを保証します。ログインの例:JWTライフサイクルイベントを処理する
トークンの無効化などのシナリオを処理するために、バックエンドに専用のエンドポイントを実装する必要があります。このエンドポイントは、OneSignalが更新を要求したときに更新されたJWTを提供する必要があります。トークンの無効化とJWTの更新を処理する例:これにより、ユーザーのJWTが無効化されたときに、バックエンドから新しいJWTをフェッチしてOneSignalに渡すことができます。また、この関数を使用して、メールアドレスと電話番号を含むトークンを生成し、認証中に作成されたトークンにそれらが含まれていない場合にメールとSMSサブスクリプションを管理できます。
サブスクリプションを追加する
モバイルアプリからサブスクリプションを追加するために追加の手順を実行する必要はありません。loginメソッドを呼び出すと、自動的に処理されます。- メールを追加する
- 電話番号を追加する
REST API
トークンアイデンティティ検証が有効になっている場合、以下のAPIへのすべてのリクエストには、ベアラートークンとしてヘッダーにサーバー生成のJWTを含める必要があります(例:Authorization: Bearer <JWT>)。
よくある質問
本人確認は必須ですか?
いいえ、ただし強く推奨されます。これなしでは、ユーザーの外部ユーザーIDを知っている任意のクライアントがそのユーザーになりすまし、サブスクリプションやデータを変更できてしまいます。セッション中にJWTの有効期限が切れた場合はどうなりますか?
SDKはJWT無効化イベントを発火します。addUserJwtInvalidatedListenerを実装して(JWTライフサイクルイベントの処理を参照)、バックエンドから更新されたトークンを取得してupdateUserJwtに渡してください。
どのSDKが本人確認をサポートしていますか?
現在、ネイティブAndroid SDK(5.2.0+)とiOS SDK(5.3.0+)です。ラッパーSDKのサポート(Flutter、React Native、Unityなど)は近日公開予定です。REST APIに本人確認は必要ですか?
トークン本人確認が有効な場合、サポートされているAPIへのすべてのリクエストは、Authorizationヘッダーにサーバー生成のJWTをベアラートークンとして含める必要があります。JWTの生成方法はSDKの使用と同じです。
