SDK認証を設定する
SDK 認証を使用すると、ログインしているユーザーの代わりに行われた SDK リクエストに対して(サーバー側で生成された)暗号証明を提供できます。
仕組み
アプリでこの機能を有効にした後、無効または欠落しているJSON Web Token(JWT)を含むリクエストを拒否するようにBrazeダッシュボードを設定できます。これには次のものが含まれます。
- カスタムイベント、属性、購入、セッションデータの送信
- Brazeワークスペースでの新規ユーザーの作成
- 標準ユーザープロファイル属性の更新
- メッセージの受信またはトリガー
認証されていないログインユーザーが、アプリのSDK APIキーを使って悪意のあるアクション(他のユーザーになりすますなど)を行うのを防げるようになります。
認証のセットアップ
ステップ1:サーバーのセットアップ
ステップ1.1:公開鍵と秘密鍵のペアを生成する
RSA256公開鍵/秘密鍵ペアを生成します。公開キーは最終的にBrazeのダッシュボードに追加されますが、秘密キーはサーバーに安全に保管する必要があります。
RS256 JWTアルゴリズムで使用する2048ビットのRSA鍵を推奨します。
秘密キーは必ず_非公開_にしてください。アプリやWebサイトに秘密鍵を公開したり、ハードコードしたりしてはなりません。あなたの秘密キーを知っている人なら誰でも、あなたのアプリケーションに代わってユーザーになりすましたり、ユーザーを作成したりすることができます。
ステップ1.2:現在のユーザーのJSON Web Tokenを作成する
秘密キーが手に入ったら、サーバー側のアプリケーションはそれを使って、現在ログインしているユーザーのアプリまたはWebサイトにJWTを返す必要があります。
通常、このロジックは、アプリが通常現在のユーザーのプロファイルをリクエストする任意の場所に配置できます。たとえば、ログインエンドポイントや、アプリが現在のユーザープロファイルを更新する場所などです。
JWTを生成する際には、以下のフィールドが必要です:
JWTヘッダー
| フィールド | 必須 | 説明 |
|---|---|---|
alg |
はい | サポートされているアルゴリズムはRS256です。 |
typ |
はい | タイプはJWTと同じでなければなりません。 |
JWTペイロード
| フィールド | 必須 | 説明 |
|---|---|---|
sub |
はい | 「subject」は、changeUserの呼び出し時にBraze SDKに指定したユーザーIDと同じである必要があります。 |
exp |
はい | このトークンをいつ期限切れにするかの「有効期限」。 |
JSON Web Tokenについての詳細や、この署名プロセスを簡素化する多くのオープンソースライブラリを参照するには、https://jwt.ioをチェックしてください。
ステップ2:SDKの設定
この機能は以下のSDKバージョンから利用可能です:
ステップ2.1:Braze SDKで認証を有効にする
この機能が有効な場合、Braze SDKは、Brazeサーバーに対して行われたネットワークリクエストに、現在のユーザーの最新の既知のJWTを追加します。
このオプションだけで初期化しても、Brazeダッシュボード内で認証の適用を開始するまでは、データ収集には何の影響もないのでご心配なく。
initializeを呼び出す際には、オプションのenableSdkAuthenticationプロパティをtrueに設定します。
1
2
3
4
5
import * as braze from "@braze/web-sdk";
braze.initialize("YOUR-API-KEY-HERE", {
baseUrl: "YOUR-SDK-ENDPOINT-HERE",
enableSdkAuthentication: true,
});
ネイティブSDKの初期化時に、SDK認証を有効にする必要があります。ネイティブのiOSおよびAndroidコードに以下の設定を追加してください:
iOS (AppDelegate.swift)
1
2
3
4
5
6
7
8
9
10
11
12
import BrazeKit
import braze_react_native_sdk
let configuration = Braze.Configuration(
apiKey: "{YOUR-BRAZE-API-KEY}",
endpoint: "{YOUR-BRAZE-ENDPOINT}"
)
configuration.api.sdkAuthentication = true
let braze = BrazeReactBridge.perform(
#selector(BrazeReactBridge.initBraze(_:)),
with: configuration
).takeUnretainedValue() as! Braze
Android (braze.xml)
1
<bool name="com_braze_sdk_authentication_enabled">true</bool>
ネイティブレイヤーでSDK認証を有効にした後、以下のステップに示すReact Native JavaScriptメソッドを使用できます。
Brazeインスタンスを設定するときは、setIsSdkAuthenticationEnabledをtrueに設定します。
1
2
3
BrazeConfig.Builder brazeConfigBuilder = new BrazeConfig.Builder()
.setIsSdkAuthenticationEnabled(true);
Braze.configure(this, brazeConfigBuilder.build());
あるいは、braze.xmlに<bool name="com_braze_sdk_authentication_enabled">true</bool>を追加することもできます。
Brazeインスタンスを設定するときは、setIsSdkAuthenticationEnabledをtrueに設定します。
1
2
3
BrazeConfig.Builder brazeConfigBuilder = BrazeConfig.Builder()
.setIsSdkAuthenticationEnabled(true)
Braze.configure(this, brazeConfigBuilder.build())
あるいは、braze.xmlに<bool name="com_braze_sdk_authentication_enabled">true</bool>を追加することもできます。
SDK認証を有効にするには、Brazeインスタンスを初期化する前に、BRZConfigurationオブジェクトのconfiguration.api.sdkAuthenticationプロパティをYESに設定します:
1
2
3
4
5
6
BRZConfiguration *configuration =
[[BRZConfiguration alloc] initWithApiKey:@"{BRAZE_API_KEY}"
endpoint:@"{BRAZE_ENDPOINT}"];
configuration.api.sdkAuthentication = YES;
Braze *braze = [[Braze alloc] initWithConfiguration:configuration];
AppDelegate.braze = braze;
SDK認証を有効にするには、SDKを初期化する際に、Braze.Configurationオブジェクトのconfiguration.api.sdkAuthenticationプロパティをtrueに設定します:
1
2
3
4
5
let configuration = Braze.Configuration(apiKey: "{YOUR-BRAZE-API-KEY}",
endpoint: "{YOUR-BRAZE-ENDPOINT}")
configuration.api.sdkAuthentication = true
let braze = Braze(configuration: configuration)
AppDelegate.braze = braze
現在、SDK認証は、iOSとAndroidのネイティブコードでSDKを初期化する際に有効にする必要があります。Flutter SDKでSDK認証を有効にするには、他のタブのiOSとAndroidの統合に従ってください。SDK認証を有効にした後、残りの機能をDartに統合することができます。
ネイティブのiOSおよびAndroidコードにおいて、SDKの初期化の一環としてSDK認証を有効にする必要があります。ネイティブレイヤーで有効にすると、Flutter SDKのメソッドを使ってJWT署名を渡すことができます。
iOS
SDK認証を有効にするには、ネイティブiOSコードでconfiguration.api.sdkAuthenticationプロパティをtrueに設定します:
1
2
3
let configuration = Braze.Configuration(apiKey: "{YOUR-BRAZE-API-KEY}", endpoint: "{YOUR-BRAZE-ENDPOINT}")
configuration.api.sdkAuthentication = true
let braze = Braze(configuration: configuration)
Android (braze.xml)
1
<bool name="com_braze_sdk_authentication_enabled">true</bool>
ネイティブレイヤーでSDK認証を有効にした後、以下のステップで示すFlutter SDKメソッドを使用できます。
ネイティブSDKの初期化時に、SDK認証を有効にする必要があります。ネイティブのiOSおよびAndroidコードに以下の設定を追加してください:
iOS
設定ファイルでSDKAuthenticationEnabledプロパティをtrueに設定します:
1
2
<key>SDKAuthenticationEnabled</key>
<true/>
Android (braze.xml)
1
<bool name="com_braze_sdk_authentication_enabled">true</bool>
ネイティブレイヤーでSDK認証を有効にした後、以下のステップで示すUnity C#メソッドを使用できます。
ネイティブSDKの初期化時に、SDK認証を有効にする必要があります。ネイティブのiOSおよびAndroidコードに以下の設定を追加してください:
iOS
SDK認証を有効にするには、config.xmlでenableSDKAuthenticationプロパティをtrueに設定します:
1
<preference name="com.braze.ios_enable_sdk_authentication" value="true" />
Android (braze.xml)
1
<bool name="com_braze_sdk_authentication_enabled">true</bool>
ネイティブレイヤーでSDK認証を有効にした後、以下のステップで示すCordova JavaScriptメソッドを使用できます。
ネイティブSDKの初期化時に、SDK認証を有効にする必要があります。iOSとAndroidではSDK認証を別々に設定します:
iOS
SDK認証を有効にするには、SDKを初期化する際にconfiguration.Api.SdkAuthenticationプロパティをtrueに設定します:
1
2
3
var configuration = new BRZConfiguration("YOUR-API-KEY", "YOUR-ENDPOINT");
configuration.Api.SdkAuthentication = true;
var braze = new Braze(configuration);
Android (braze.xml)
1
<bool name="com_braze_sdk_authentication_enabled">true</bool>
SDK認証を有効にした後、以下のステップで示す.NET MAUIメソッドを使用できます。
Braze Expoプラグインを使用する際は、アプリ設定でenableSdkAuthenticationプロパティをtrueに設定します。これにより、手動でのネイティブコードの変更を必要とせずに、ネイティブのiOSおよびAndroidレイヤーでSDK認証が自動的に設定されます。
app.jsonあるいはapp.config.js
1
2
3
4
5
6
7
8
9
10
11
12
{
"expo": {
"plugins": [
[
"@braze/expo-plugin",
{
"enableSdkAuthentication": true
}
]
]
}
}
アプリ設定でSDK認証を有効にした後、React Nativeタブに表示されているReact Native JavaScriptメソッドを使用して、以下のステップを実行できます。
完全な実装例については、GitHub上のBraze Expoプラグインサンプルアプリを参照してください。
ステップ2.2:現在のユーザーのJWTを設定する
アプリがBrazeのchangeUserメソッドを呼び出すたびに、サーバー側で生成されたJWTも指定します。
また、トークンが現在のユーザーのセッションの途中でリフレッシュされるように設定することもできます。
changeUserは、ユーザーIDが_実際に変更された_場合にのみ呼び出す必要があることに注意してください。ユーザーIDが変更されていない場合は、このメソッドを認証トークン(JWT)の更新手段として使用しないでください。
changeUserの呼び出し時にJWTを指定します:
1
2
import * as braze from "@braze/web-sdk";
braze.changeUser("NEW-USER-ID", "JWT-FROM-SERVER");
あるいは、セッションの途中でユーザーのトークンをリフレッシュした場合:
1
2
import * as braze from "@braze/web-sdk";
braze.setSdkAuthenticationSignature("NEW-JWT-FROM-SERVER");
changeUserの呼び出し時にJWTを指定します:
1
2
3
import Braze from '@braze/react-native-sdk';
Braze.changeUser("NEW-USER-ID", "JWT-FROM-SERVER");
あるいは、セッションの途中でユーザーのトークンをリフレッシュした場合:
1
2
3
import Braze from '@braze/react-native-sdk';
Braze.setSdkAuthenticationSignature("NEW-JWT-FROM-SERVER");
changeUserの呼び出し時にJWTを指定します:
1
Braze.getInstance(this).changeUser("NEW-USER-ID", "JWT-FROM-SERVER");
あるいは、セッションの途中でユーザーのトークンをリフレッシュした場合:
1
Braze.getInstance(this).setSdkAuthenticationSignature("NEW-JWT-FROM-SERVER");
changeUserの呼び出し時にJWTを指定します:
1
Braze.getInstance(this).changeUser("NEW-USER-ID", "JWT-FROM-SERVER")
あるいは、セッションの途中でユーザーのトークンをリフレッシュした場合:
1
Braze.getInstance(this).setSdkAuthenticationSignature("NEW-JWT-FROM-SERVER")
changeUserの呼び出し時にJWTを指定します:
1
[AppDelegate.braze changeUser:@"userId" sdkAuthSignature:@"JWT-FROM-SERVER"];
あるいは、セッションの途中でユーザーのトークンをリフレッシュした場合:
1
[AppDelegate.braze setSDKAuthenticationSignature:@"NEW-JWT-FROM-SERVER"];
changeUserの呼び出し時にJWTを指定します:
1
AppDelegate.braze?.changeUser(userId: "userId", sdkAuthSignature: "JWT-FROM-SERVER")
あるいは、セッションの途中でユーザーのトークンをリフレッシュした場合:
1
AppDelegate.braze?.set(sdkAuthenticationSignature: "NEW-JWT-FROM-SERVER")
changeUserの呼び出し時にJWTを指定します:
1
braze.changeUser("userId", sdkAuthSignature: "JWT-FROM-SERVER")
あるいは、セッションの途中でユーザーのトークンをリフレッシュした場合:
1
braze.setSdkAuthenticationSignature("NEW-JWT-FROM-SERVER")
changeUserの呼び出し時にJWTを指定します:
1
2
3
4
import 'package:braze_plugin/braze_plugin.dart';
BrazePlugin braze = BrazePlugin();
braze.changeUser("NEW-USER-ID", sdkAuthSignature: "JWT-FROM-SERVER");
あるいは、セッションの途中でユーザーのトークンをリフレッシュした場合:
1
2
3
4
import 'package:braze_plugin/braze_plugin.dart';
BrazePlugin braze = BrazePlugin();
braze.setSdkAuthenticationSignature("NEW-JWT-FROM-SERVER");
ChangeUserの呼び出し時にJWTを指定します:
1
BrazeBinding.ChangeUser("NEW-USER-ID", "JWT-FROM-SERVER");
あるいは、セッションの途中でユーザーのトークンをリフレッシュした場合:
1
BrazeBinding.SetSdkAuthenticationSignature("NEW-JWT-FROM-SERVER");
changeUserの呼び出し時にJWTを指定します:
1
BrazePlugin.changeUser("NEW-USER-ID", "JWT-FROM-SERVER");
あるいは、セッションの途中でユーザーのトークンをリフレッシュした場合:
1
BrazePlugin.setSdkAuthenticationSignature("NEW-JWT-FROM-SERVER");
ChangeUserの呼び出し時にJWTを指定します:
iOS
1
Braze.SharedInstance?.ChangeUser("NEW-USER-ID", "JWT-FROM-SERVER");
あるいは、セッションの途中でユーザーのトークンをリフレッシュした場合:
1
Braze.SharedInstance?.SetSDKAuthenticationSignature("NEW-JWT-FROM-SERVER");
Android
1
Braze.GetInstance(this).ChangeUser("NEW-USER-ID", "JWT-FROM-SERVER");
あるいは、セッションの途中でユーザーのトークンをリフレッシュした場合:
1
Braze.GetInstance(this).SetSdkAuthenticationSignature("NEW-JWT-FROM-SERVER");
Braze Expoプラグインを使用する際は、同じReact Native SDKメソッドを使います。changeUserの呼び出し時にJWTを指定します:
1
2
3
import Braze from '@braze/react-native-sdk';
Braze.changeUser("NEW-USER-ID", "JWT-FROM-SERVER");
あるいは、セッションの途中でユーザーのトークンをリフレッシュした場合:
1
2
3
import Braze from '@braze/react-native-sdk';
Braze.setSdkAuthenticationSignature("NEW-JWT-FROM-SERVER");
ステップ2.3:無効なトークンのコールバック関数を登録する
この機能が必須に設定されている場合、以下のシナリオでSDKリクエストがBrazeによって拒否されます:
- Braze APIが受信した時点でJWTの有効期限が切れていた
- JWTが空または欠落していた
- Brazeダッシュボードにアップロードした公開鍵でJWTの検証に失敗した
subscribeToSdkAuthenticationFailuresを使用して、これらのいずれかの理由でSDKリクエストが失敗したときに通知を受け取るようにサブスクライブできます。コールバック関数には、関連するerrorCode、エラーのreason、リクエストのuserId(ユーザーは匿名にはなれません)、およびエラーを引き起こした認証トークン(JWT)を含むオブジェクトが渡されます。
失敗したリクエストは、アプリが新しい有効なJWTを提供するまで、定期的に再試行されます。そのユーザーがまだログインしている場合、このコールバックをサーバーに新しいJWTを要求する機会として使用し、この新しい有効なトークンをBraze SDKに提供することができます。
認証エラーが発生した場合は、エラー内のuserIdが現在ログイン中のユーザーと一致するか確認し、サーバーから新しい署名を取得してBraze SDKに提供してください。これらのエラーを監視サービスやエラーレポートサービスに記録することもできます。
これらのコールバックメソッドは、独自の監視サービスやエラーログサービスを追加して、Brazeリクエストが拒否される頻度を追跡するのに最適な場所です。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import * as braze from "@braze/web-sdk";
braze.subscribeToSdkAuthenticationFailures((error) => {
console.error("SDK authentication failed:", error);
console.log("Error code:", error.errorCode);
console.log("User ID:", error.userId);
// Note: Do not log error.signature as it contains sensitive authentication credentials
// Verify the error.userId matches the currently logged-in user
// Fetch a new token from your server and set it
fetchNewSignature(error.userId).then((newSignature) => {
braze.setSdkAuthenticationSignature(newSignature);
});
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import Braze from '@braze/react-native-sdk';
const sdkAuthErrorSubscription = Braze.addListener(
Braze.Events.SDK_AUTHENTICATION_ERROR,
(error) => {
console.log(`SDK Authentication for ${error.userId} failed with error code ${error.errorCode}.`);
const updated_jwt = getNewTokenSomehow(error);
Braze.setSdkAuthenticationSignature(updated_jwt);
}
);
// Don't forget to remove the listener when done
// sdkAuthErrorSubscription.remove();
1
2
3
4
Braze.getInstance(this).subscribeToSdkAuthenticationFailures(error -> {
String newToken = getNewTokenSomehow(error);
Braze.getInstance(getContext()).setSdkAuthenticationSignature(newToken);
});
1
2
3
4
Braze.getInstance(this).subscribeToSdkAuthenticationFailures({ error: BrazeSdkAuthenticationErrorEvent ->
val newToken: String = getNewTokenSomehow(error)
Braze.getInstance(getContext()).setSdkAuthenticationSignature(newToken)
})
1
2
3
4
5
6
7
8
9
10
Braze *braze = [[Braze alloc] initWithConfiguration:configuration];
braze.sdkAuthDelegate = delegate;
AppDelegate.braze = braze;
// Method to implement in delegate
- (void)braze:(Braze *)braze sdkAuthenticationFailedWithError:(BRZSDKAuthenticationError *)error {
NSLog(@"Invalid SDK Authentication Token.");
NSString *newSignature = getNewTokenSomehow(error);
[AppDelegate.braze setSDKAuthenticationSignature:newSignature];
}
1
2
3
4
5
6
7
8
9
10
let braze = Braze(configuration: configuration)
braze.sdkAuthDelegate = delegate
AppDelegate.braze = braze
// Method to implement in delegate
func braze(_ braze: Braze, sdkAuthenticationFailedWithError error: Braze.SDKAuthenticationError) {
print("Invalid SDK Authentication Token.")
let newSignature = getNewTokenSomehow(error)
AppDelegate.braze?.set(sdkAuthenticationSignature: newSignature)
}
1
2
3
4
5
braze.setBrazeSdkAuthenticationErrorCallback((BrazeSdkAuthenticationError error) async {
print("Invalid SDK Authentication Token.");
final newSignature = getNewTokenSomehow(error);
braze.setSdkAuthenticationSignature(newSignature);
});
1
2
3
4
5
6
7
8
9
10
import 'package:braze_plugin/braze_plugin.dart';
BrazePlugin braze = BrazePlugin();
braze.setBrazeSdkAuthenticationErrorCallback((BrazeSdkAuthenticationError error) async {
print("SDK Authentication for ${error.userId} failed with error code ${error.errorCode}.");
String newSignature = getNewTokenSomehow(error);
braze.setSdkAuthenticationSignature(newSignature);
});
iOS
ネイティブのiOS実装でSDK認証デリゲートを設定します:
1
2
3
4
5
6
7
8
9
public class SdkAuthDelegate : BRZSdkAuthDelegate
{
public void Braze(Braze braze, BRZSDKAuthenticationError error)
{
Debug.Log("Invalid SDK Authentication Token.");
string newSignature = GetNewTokenSomehow(error);
BrazeBinding.SetSdkAuthenticationSignature(newSignature);
}
}
Android
1
2
3
4
Braze.GetInstance(this).SubscribeToSdkAuthenticationFailures((error) => {
string newToken = GetNewTokenSomehow(error);
Braze.GetInstance(this).SetSdkAuthenticationSignature(newToken);
});
1
2
3
4
5
6
BrazePlugin.subscribeToSdkAuthenticationFailures((error) => {
console.log(`SDK Authentication for ${error.user_id} failed with error code ${error.error_code}.`);
const newSignature = getNewTokenSomehow(error);
BrazePlugin.setSdkAuthenticationSignature(newSignature);
});
iOS
BrazeインスタンスにSDK認証デリゲートを設定します:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class SdkAuthDelegate : BRZSdkAuthDelegate
{
public override void Braze(Braze braze, BRZSDKAuthenticationError error)
{
Console.WriteLine("Invalid SDK Authentication Token.");
string newSignature = GetNewTokenSomehow(error);
Braze.SharedInstance?.SetSDKAuthenticationSignature(newSignature);
}
}
// Set the delegate during initialization
var configuration = new BRZConfiguration("YOUR-API-KEY", "YOUR-ENDPOINT");
configuration.Api.SdkAuthentication = true;
var braze = new Braze(configuration);
braze.SdkAuthDelegate = new SdkAuthDelegate();
Android
1
2
3
4
Braze.GetInstance(this).SubscribeToSdkAuthenticationFailures((error) => {
string newToken = GetNewTokenSomehow(error);
Braze.GetInstance(this).SetSdkAuthenticationSignature(newToken);
});
Braze Expoプラグインを使用する際は、同じReact Native SDKメソッドを使います:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import Braze from '@braze/react-native-sdk';
const sdkAuthErrorSubscription = Braze.addListener(
Braze.Events.SDK_AUTHENTICATION_ERROR,
(error) => {
console.log(`SDK Authentication for ${error.userId} failed with error code ${error.errorCode}.`);
const updated_jwt = getNewTokenSomehow(error);
Braze.setSdkAuthenticationSignature(updated_jwt);
}
);
// Don't forget to remove the listener when done
// sdkAuthErrorSubscription.remove();
ステップ3:ダッシュボードで認証を有効にする
次に、前に設定したアプリのBrazeダッシュボードで認証を有効にできます。
BrazeダッシュボードでアプリのSDK認証設定が必須に設定されていない限り、SDKリクエストは認証なしで通常どおり処理され続けることに注意してください。
統合に何か問題が発生した場合(例えば、アプリがSDKにトークンを不正に渡している、またはサーバーが無効なトークンを生成している)、Brazeダッシュボードでこの機能を無効にすると、データは検証なしで通常通り流れるようになります。
適用オプション
ダッシュボードの設定の管理ページでは、各アプリに3つのSDK認証ステートがあり、Brazeがどのようにリクエストを検証するかを制御します。
| 設定 | 説明 |
|---|---|
| 無効 | Brazeは、ユーザーに提供されたJWTを検証しません。(デフォルト設定) |
| オプション | Brazeは、ログインしているユーザーのリクエストを検証しますが、無効なリクエストは拒否しません。 |
| 必須 | Brazeは、ログインしているユーザーのリクエストを検証し、無効なJWTは拒否します。 |

オプション設定は、この機能がアプリのSDKトラフィックに与える潜在的な影響を監視するのに便利な方法です。
無効なJWTはオプションと必須の両方の状態で報告されますが、必須状態でのみSDKリクエストが拒否され、アプリは再試行して新しいJWTをリクエストします。
公開鍵を管理する
公開鍵を追加する
アプリごとに、プライマリ、セカンダリ、ターシャリの最大3つの公開キーを追加できます。必要に応じて、同じキーを複数のアプリに追加することもできます。公開鍵を追加するには:
- Brazeのダッシュボードに行き、設定 > アプリ設定を選択します。
- 利用可能なアプリのリストからアプリを選びます。
- SDK認証で、公開キーを追加を選択します。
- オプションの説明を入力し、公開キーを貼り付け、公開キーを追加を選択します。
新しいプライマリキーを割り当てる
セカンダリキーまたはターシャリキーを新しいプライマリキーとして割り当てるには:
- Brazeのダッシュボードに行き、設定 > アプリ設定を選択します。
- 利用可能なアプリのリストからアプリを選びます。
- SDK認証でキーを選択し、管理 > プライマリキーに設定を選択します。
キーを削除する
プライマリキーを削除するには、まず新たなプライマリキーを割り当て、それからキーを削除します。非プライマリキーを削除するには:
- Brazeのダッシュボードに行き、設定 > アプリ設定を選択します。
- 利用可能なアプリのリストからアプリを選びます。
- SDK認証でプライマリキー以外のキーを選択し、管理 > 公開キーを削除を選択します。
分析
各アプリには、この機能がオプション状態と必須状態にある間に収集されたSDK認証エラーの内訳が表示されます。
データはリアルタイムで入手でき、チャート上のポイントにカーソルを合わせると、指定した日付のエラーの内訳を見ることができます。

エラーコード
| エラーコード | エラーの理由 | 説明 | 解決手順 |
|---|---|---|---|
| 10 | EXPIRATION_REQUIRED |
Brazeを使用する場合、有効期限は必須フィールドです。 | JWT生成ロジックにexpまたは有効期限フィールドを追加してください。 |
| 20 | DECODING_ERROR |
公開鍵が一致しないか、一般的な捕捉不能エラーが発生しました。 | JWTをJWTテストツールにコピーして、JWTが無効な形式である理由を診断してください。 |
| 21 | SUBJECT_MISMATCH |
期待されるサブジェクトと実際のサブジェクトが一致しません。 | subフィールドは、SDKのchangeUserメソッドに渡されたユーザーIDと同じである必要があります。 |
| 22 | EXPIRED |
提供されたトークンの有効期限が切れています。 | 有効期限を延長するか、トークンが期限切れになる前に定期的に更新してください。 |
| 23 | INVALID_PAYLOAD |
トークンのペイロードが無効です。 | JWTをJWTテストツールにコピーして、JWTが無効な形式である理由を診断してください。 |
| 24 | INCORRECT_ALGORITHM |
トークンのアルゴリズムはサポートされていません。 | JWTをRS256暗号化方式に変更してください。その他のタイプはサポートされていません。 |
| 25 | PUBLIC_KEY_ERROR |
公開鍵が適切な形式に変換できませんでした。 | JWTをJWTテストツールにコピーして、JWTが無効な形式である理由を診断してください。 |
| 26 | MISSING_TOKEN |
リクエストにトークンが指定されていません。 | changeUser(id, token)を呼び出す際にトークンを渡していることを確認し、そのトークンが空白でないことを確認してください。 |
| 27 | NO_MATCHING_PUBLIC_KEYS |
提供されたトークンに一致する公開鍵がありませんでした。 | JWTで使用されている秘密キーは、アプリに設定されている公開キーのいずれとも一致しません。このAPIキーに対応するワークスペース内の正しいアプリに公開キーを追加したことを確認してください。 |
| 28 | PAYLOAD_USER_ID_MISMATCH |
リクエストのペイロード内のユーザーIDがすべて、要求通りに一致しているわけではありません。 | これは予期しないエラーであり、不正なペイロードを引き起こす可能性があります。サポートチケットを開いてお問い合わせください。 |
よくある質問(FAQ)
この機能はすべてのアプリで同時に有効にする必要がありますか?
いいえ、この機能は特定のアプリに対して有効にすることができ、すべてのアプリで一度に使用する必要はありません。
アプリの古いバージョンを使っているユーザーはどうなりますか?
この機能を適用し始めると、古いバージョンのアプリによるリクエストはBrazeによって拒否され、SDKによって再試行されます。ユーザーがアプリをサポートされたバージョンにアップグレードすると、キューに入れられたリクエストは再び受け入れられるようになります。
可能であれば、他の必須アップグレードと同様に、ユーザーにアップグレードを勧めてください。あるいは、許容できる割合のユーザーがアップグレードしたことを確認するまで、この機能をオプションにしておくこともできます。
JWTを生成するときには、どのような有効期限を使用する必要がありますか?
平均セッション期間、セッションCookie/トークンの有効期限、またはアプリケーションが現在のユーザープロファイルを更新する頻度のうち、高い方の値を使用することをお勧めします。
ユーザーのセッションの途中でJWTの有効期限が切れた場合はどうなりますか?
ユーザーのトークンがセッション中に期限切れになると、SDKはコールバック関数を呼び出して、Brazeにデータを送信し続けるために新しいJWTが必要であることをアプリに知らせます。
サーバー側の統合が壊れ、JWTを作成できなくなった場合はどうなりますか?
サーバーがJWTを提供できない場合、または統合に問題がある場合は、Brazeダッシュボードでいつでも機能を無効にできます。
一度無効にすると、保留中の失敗したSDKリクエストは最終的にSDKによって再試行され、Brazeによって受け入れられます。
なぜこの機能では、共有シークレットではなく公開キー/秘密キーを使うのでしょうか?
共有シークレットを使う場合、Brazeのダッシュボードページなど、その共有シークレットにアクセスできる人なら誰でも、トークンを生成してエンドユーザーになりすますことができます。
代わりに、公開キーと秘密キーを使用します。これにより、Brazeの従業員でさえ(ましてや御社のユーザーは言うまでもなく)あなたの秘密キーにアクセスできません。
拒否されたリクエストはどのように再試行されますか?
認証エラーが原因でリクエストが拒否されると、SDKはユーザーのJWTを更新するために使用されるコールバックを呼び出します。
リクエストは指数バックオフアプローチを使用して定期的に再試行されます。50回連続で失敗すると、次のセッション開始まで再試行は一時停止されます。各SDKには、手動でデータフラッシュをリクエストするメソッドもあります。
匿名ユーザーに対してSDK認証は使えますか?
いいえ。SDK認証はWebサイトが誰かのIDを主張することで機能するため、識別済みのユーザーにのみ適用されます。匿名ユーザーの場合、主張するIDがありません。
適用はchangeUserが呼び出された後に開始されます。ユーザーが識別される前(例えば、サインアップ前に匿名で閲覧している間)は、SDKはJWTなしでBrazeにデータを送信できます。changeUserが呼び出された後、その識別済みプロファイルに対するリクエストには有効なJWTが必要になります。
つまり、一般的なユーザージャーニーは次のようになります:
- ユーザーがWebサイトにアクセスするか、アプリを匿名で開きます。BrazeはJWTなしでこのアクティビティを収集します。
- ユーザーがサインアップまたはログインし、アプリが
external_idを指定してchangeUserを呼び出します。 - Brazeはそのユーザーのアクティビティの収集を続け、その識別済みプロファイルに対するリクエストにはSDK認証が適用されます。
SDK認証はユーザーエイリアスで機能しますか?
いいえ。SDK認証にはexternal_idが必要です。braze_idまたはalias_idのみが利用可能な場合は設定できないため、エイリアスのみのプロファイルではSDK認証を使用できません。
SDK認証を有効にすると、未認証のアクティビティ収集がブロックされますか?
いいえ。SDK認証は正当な匿名アクティビティの収集をブロックしません。changeUserでプロファイルが識別された後にのみ適用されます。
GitHub でこのページを編集