Configurar la autenticación del SDK
La autenticación del SDK te permite proporcionar una prueba criptográfica (generada en el servidor) a las solicitudes del SDK realizadas en nombre de usuarios que han iniciado sesión.
Cómo funciona
Después de habilitar esta característica en tu aplicación, puedes configurar el panel de Braze para que rechace cualquier solicitud con un JSON Web Token (JWT) no válido o ausente, lo que incluye:
- Enviar eventos personalizados, atributos, compras y datos de sesión
- Crear nuevos usuarios en tu espacio de trabajo de Braze
- Actualizar atributos estándar del perfil de usuario
- Recibir o desencadenar mensajes
Ahora puedes evitar que los usuarios autenticados que han iniciado sesión utilicen la clave de API de SDK de tu aplicación para realizar acciones maliciosas, como suplantar a otros usuarios.
Configuración de la autenticación
Paso 1: Configura tu servidor
Paso 1.1: Genera un par de claves pública/privada
Genera un par de claves pública/privada RSA256. La clave pública se añadirá eventualmente al panel de Braze, mientras que la clave privada debe almacenarse de forma segura en tu servidor.
Recomendamos una clave RSA de 2048 bits para su uso con el algoritmo JWT RS256.

Recuerda mantener tus claves privadas en privado. Nunca expongas ni codifiques de forma fija tu clave privada en tu aplicación o sitio web. Cualquier persona que conozca tu clave privada puede suplantar o crear usuarios en nombre de tu aplicación.
Paso 1.2: Crea un JSON Web Token para el usuario actual
Una vez que tengas tu clave privada, tu aplicación del lado del servidor debe usarla para devolver un JWT a tu aplicación o sitio web para el usuario que ha iniciado sesión actualmente.
Normalmente, esta lógica podría ir donde tu aplicación solicita habitualmente el perfil del usuario actual; como un endpoint de inicio de sesión o donde tu aplicación actualiza el perfil del usuario actual.
Al generar el JWT, se esperan los siguientes campos:
Encabezado JWT
| Campo | Obligatorio | Descripción |
|---|---|---|
alg |
Sí | El algoritmo compatible es RS256. |
typ |
Sí | El tipo debe ser igual a JWT. |
Carga útil JWT
| Campo | Obligatorio | Descripción |
|---|---|---|
sub |
Sí | El “subject” debe ser igual al ID de usuario que proporcionas al SDK de Braze al llamar a changeUser |
exp |
Sí | La “expiration” de cuándo deseas que este token expire, como una marca de tiempo Unix en segundos (por ejemplo, 1893456000 para el 1 de enero de 2030). |

Para obtener más información sobre los JSON Web Tokens, o para explorar las muchas bibliotecas de código abierto que simplifican este proceso de firma, consulta https://jwt.io.
Paso 2: Configura el SDK
Esta característica está disponible a partir de las siguientes versiones del SDK:

Para integraciones de iOS, esta página detalla los pasos para el SDK Swift de Braze. Para ver un ejemplo de uso en el SDK legacy de iOS de Appboy, consulta este archivo y este archivo.
Paso 2.1: Habilita la autenticación en el SDK de Braze.
Cuando esta característica está habilitada, el SDK de Braze añadirá el último JWT conocido del usuario actual a las solicitudes de red realizadas a los servidores de Braze.

No te preocupes, inicializar con esta opción por sí sola no afectará la recopilación de datos de ninguna manera, hasta que comiences a aplicar la autenticación dentro del panel de Braze.
Al llamar a initialize, establece la propiedad opcional enableSdkAuthentication en 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,
});
La autenticación del SDK debe habilitarse durante la inicialización nativa del SDK. Añade la siguiente configuración a tu código nativo de iOS y 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>
Después de habilitar la autenticación del SDK en la capa nativa, puedes usar los métodos de JavaScript de React Native que se muestran en los siguientes pasos.
Al configurar la instancia de Braze, llama a setIsSdkAuthenticationEnabled con true.
1
2
3
BrazeConfig.Builder brazeConfigBuilder = new BrazeConfig.Builder()
.setIsSdkAuthenticationEnabled(true);
Braze.configure(this, brazeConfigBuilder.build());
Alternativamente, puedes añadir <bool name="com_braze_sdk_authentication_enabled">true</bool> a tu braze.xml.
Al configurar la instancia de Braze, llama a setIsSdkAuthenticationEnabled con true.
1
2
3
BrazeConfig.Builder brazeConfigBuilder = BrazeConfig.Builder()
.setIsSdkAuthenticationEnabled(true)
Braze.configure(this, brazeConfigBuilder.build())
Alternativamente, puedes añadir <bool name="com_braze_sdk_authentication_enabled">true</bool> a tu braze.xml.
Para habilitar la autenticación del SDK, establece la propiedad configuration.api.sdkAuthentication de tu objeto BRZConfiguration en YES antes de inicializar la instancia de Braze:
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;
Para habilitar la autenticación del SDK, establece la propiedad configuration.api.sdkAuthentication de tu objeto Braze.Configuration en true al inicializar el SDK:
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
Actualmente, la autenticación del SDK debe habilitarse como parte de la inicialización del SDK en código nativo de iOS y Android. Para habilitar la autenticación del SDK en el SDK de Flutter, sigue las integraciones para iOS y Android desde las otras pestañas. Después de habilitar la autenticación del SDK, el resto de la característica puede integrarse en Dart.
La autenticación del SDK debe habilitarse como parte de la inicialización del SDK en código nativo de iOS y Android. Cuando está habilitada en la capa nativa, puedes usar los métodos del SDK de Flutter para pasar la firma JWT.
iOS
Para habilitar la autenticación del SDK, establece la propiedad configuration.api.sdkAuthentication en true en tu código nativo de iOS:
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>
Después de habilitar la autenticación del SDK en la capa nativa, puedes usar los métodos del SDK de Flutter que se muestran en los siguientes pasos.
La autenticación del SDK debe habilitarse durante la inicialización nativa del SDK. Añade la siguiente configuración a tu código nativo de iOS y Android:
iOS
Establece la propiedad SDKAuthenticationEnabled en true en tu archivo de configuración:
1
2
<key>SDKAuthenticationEnabled</key>
<true/>
Android (braze.xml)
1
<bool name="com_braze_sdk_authentication_enabled">true</bool>
Después de habilitar la autenticación del SDK en la capa nativa, puedes usar los métodos de C# de Unity que se muestran en los siguientes pasos.
La autenticación del SDK debe habilitarse durante la inicialización nativa del SDK. Añade la siguiente configuración a tu código nativo de iOS y Android:
iOS
Para habilitar la autenticación del SDK, establece la propiedad enableSDKAuthentication en true en tu config.xml:
1
<preference name="com.braze.ios_enable_sdk_authentication" value="true" />
Android (braze.xml)
1
<bool name="com_braze_sdk_authentication_enabled">true</bool>
Después de habilitar la autenticación del SDK en la capa nativa, puedes usar los métodos de JavaScript de Cordova que se muestran en los siguientes pasos.
La autenticación del SDK debe habilitarse durante la inicialización nativa del SDK. Configura la autenticación del SDK por separado para iOS y Android:
iOS
Para habilitar la autenticación del SDK, establece la propiedad configuration.Api.SdkAuthentication en true al inicializar el SDK:
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>
Después de habilitar la autenticación del SDK, puedes usar los métodos de .NET MAUI que se muestran en los siguientes pasos.
Al usar el plugin de Braze Expo, establece la propiedad enableSdkAuthentication en true en la configuración de tu aplicación. Esto configura automáticamente la autenticación del SDK en las capas nativas de iOS y Android sin requerir cambios manuales en el código nativo.
app.json o app.config.js
1
2
3
4
5
6
7
8
9
10
11
12
{
"expo": {
"plugins": [
[
"@braze/expo-plugin",
{
"enableSdkAuthentication": true
}
]
]
}
}
Después de habilitar la autenticación del SDK en la configuración de tu aplicación, puedes usar los métodos de JavaScript de React Native que se muestran en la pestaña de React Native para los siguientes pasos.

Para un ejemplo completo de implementación, consulta la aplicación de ejemplo del plugin de Braze Expo en GitHub.
Paso 2.2: Establece el JWT del usuario actual
Siempre que tu aplicación llame al método changeUser de Braze, proporciona también el JWT que fue generado del lado del servidor.
También puedes configurar el token para que se actualice a mitad de sesión para el usuario actual.

Ten en cuenta que changeUser solo debe llamarse cuando el ID de usuario haya cambiado realmente. No debes usar este método como una forma de actualizar el token de autenticación (JWT) si el ID de usuario no ha cambiado.
Proporciona el JWT al llamar a changeUser:
1
2
import * as braze from "@braze/web-sdk";
braze.changeUser("NEW-USER-ID", "JWT-FROM-SERVER");
O, cuando hayas actualizado el token del usuario a mitad de sesión:
1
2
import * as braze from "@braze/web-sdk";
braze.setSdkAuthenticationSignature("NEW-JWT-FROM-SERVER");
Proporciona el JWT al llamar a changeUser:
1
2
3
import Braze from '@braze/react-native-sdk';
Braze.changeUser("NEW-USER-ID", "JWT-FROM-SERVER");
O, cuando hayas actualizado el token del usuario a mitad de sesión:
1
2
3
import Braze from '@braze/react-native-sdk';
Braze.setSdkAuthenticationSignature("NEW-JWT-FROM-SERVER");
Proporciona el JWT al llamar a changeUser:
1
Braze.getInstance(this).changeUser("NEW-USER-ID", "JWT-FROM-SERVER");
O, cuando hayas actualizado el token del usuario a mitad de sesión:
1
Braze.getInstance(this).setSdkAuthenticationSignature("NEW-JWT-FROM-SERVER");
Proporciona el JWT al llamar a changeUser:
1
Braze.getInstance(this).changeUser("NEW-USER-ID", "JWT-FROM-SERVER")
O, cuando hayas actualizado el token del usuario a mitad de sesión:
1
Braze.getInstance(this).setSdkAuthenticationSignature("NEW-JWT-FROM-SERVER")
Proporciona el JWT al llamar a changeUser:
1
[AppDelegate.braze changeUser:@"userId" sdkAuthSignature:@"JWT-FROM-SERVER"];
O, cuando hayas actualizado el token del usuario a mitad de sesión:
1
[AppDelegate.braze setSDKAuthenticationSignature:@"NEW-JWT-FROM-SERVER"];
Proporciona el JWT al llamar a changeUser:
1
AppDelegate.braze?.changeUser(userId: "userId", sdkAuthSignature: "JWT-FROM-SERVER")

changeUser retorna inmediatamente en el hilo que lo llama. La firma de autenticación del SDK proporcionada aquí se adjunta después de que se completa el trabajo de cambio de usuario.
O, cuando hayas actualizado el token del usuario a mitad de sesión:
1
AppDelegate.braze?.set(sdkAuthenticationSignature: "NEW-JWT-FROM-SERVER")
Proporciona el JWT al llamar a changeUser:
1
braze.changeUser("userId", sdkAuthSignature: "JWT-FROM-SERVER")
O, cuando hayas actualizado el token del usuario a mitad de sesión:
1
braze.setSdkAuthenticationSignature("NEW-JWT-FROM-SERVER")
Proporciona el JWT al llamar a changeUser:
1
2
3
4
import 'package:braze_plugin/braze_plugin.dart';
BrazePlugin braze = BrazePlugin();
braze.changeUser("NEW-USER-ID", sdkAuthSignature: "JWT-FROM-SERVER");
O, cuando hayas actualizado el token del usuario a mitad de sesión:
1
2
3
4
import 'package:braze_plugin/braze_plugin.dart';
BrazePlugin braze = BrazePlugin();
braze.setSdkAuthenticationSignature("NEW-JWT-FROM-SERVER");
Proporciona el JWT al llamar a ChangeUser:
1
BrazeBinding.ChangeUser("NEW-USER-ID", "JWT-FROM-SERVER");
O, cuando hayas actualizado el token del usuario a mitad de sesión:
1
BrazeBinding.SetSdkAuthenticationSignature("NEW-JWT-FROM-SERVER");
Proporciona el JWT al llamar a changeUser:
1
BrazePlugin.changeUser("NEW-USER-ID", "JWT-FROM-SERVER");
O, cuando hayas actualizado el token del usuario a mitad de sesión:
1
BrazePlugin.setSdkAuthenticationSignature("NEW-JWT-FROM-SERVER");
Proporciona el JWT al llamar a ChangeUser:
iOS
1
Braze.SharedInstance?.ChangeUser("NEW-USER-ID", "JWT-FROM-SERVER");
O, cuando hayas actualizado el token del usuario a mitad de sesión:
1
Braze.SharedInstance?.SetSDKAuthenticationSignature("NEW-JWT-FROM-SERVER");
Android
1
Braze.GetInstance(this).ChangeUser("NEW-USER-ID", "JWT-FROM-SERVER");
O, cuando hayas actualizado el token del usuario a mitad de sesión:
1
Braze.GetInstance(this).SetSdkAuthenticationSignature("NEW-JWT-FROM-SERVER");
Al usar el plugin de Braze Expo, usa los mismos métodos del SDK de React Native. Proporciona el JWT al llamar a changeUser:
1
2
3
import Braze from '@braze/react-native-sdk';
Braze.changeUser("NEW-USER-ID", "JWT-FROM-SERVER");
O, cuando hayas actualizado el token del usuario a mitad de sesión:
1
2
3
import Braze from '@braze/react-native-sdk';
Braze.setSdkAuthenticationSignature("NEW-JWT-FROM-SERVER");
Paso 2.3: Registra una función de devolución de llamada para tokens no válidos
Cuando esta característica se establece como Obligatoria, los siguientes escenarios harán que las solicitudes del SDK sean rechazadas por Braze:
- El JWT estaba expirado en el momento en que fue recibido por la API de Braze
- El JWT estaba vacío o ausente
- El JWT no pudo verificarse con las claves públicas que cargaste en el panel de Braze
Puedes usar subscribeToSdkAuthenticationFailures para suscribirte y recibir notificaciones cuando las solicitudes del SDK fallen por alguna de estas razones. Una función de devolución de llamada contiene un objeto con el errorCode relevante, la reason del error, el userId de la solicitud (el usuario no puede ser anónimo) y el token de autenticación (JWT) que causó el error.
Las solicitudes fallidas se reintentarán periódicamente hasta que tu aplicación proporcione un nuevo JWT válido. Si ese usuario sigue con sesión iniciada, puedes usar esta devolución de llamada como una oportunidad para solicitar un nuevo JWT a tu servidor y proporcionar al SDK de Braze este nuevo token válido.
Cuando recibas un error de autenticación, verifica que el userId en el error coincida con tu usuario actualmente con sesión iniciada, luego obtén una nueva firma de tu servidor y proporciónala al SDK de Braze. También puedes registrar estos errores en tu servicio de monitoreo o informe de errores.

Estos métodos de devolución de llamada son un excelente lugar para añadir tu propio servicio de monitoreo o registro de errores para hacer seguimiento de la frecuencia con la que tus solicitudes de Braze son rechazadas.
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
Establece el delegado de autenticación del SDK en tu implementación nativa de iOS:
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
Establece el delegado de autenticación del SDK en tu instancia de Braze:
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);
});
Al usar el plugin de Braze Expo, usa los mismos métodos del SDK de React Native:
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();
Paso 3: Habilita la autenticación en el panel
A continuación, puedes habilitar la autenticación en el panel de Braze para las aplicaciones que configuraste anteriormente.
Ten en cuenta que las solicitudes del SDK seguirán fluyendo con normalidad sin autenticación a menos que la configuración de autenticación del SDK de la aplicación se establezca como Obligatorio en el panel de Braze.
Si algo sale mal con tu integración (por ejemplo, tu aplicación pasa tokens incorrectamente al SDK, o tu servidor genera tokens no válidos), deshabilita esta característica en el panel de Braze, y los datos se reanudarán fluyendo con normalidad sin verificación.
Opciones de aplicación
En la página Administrar configuración del panel, cada aplicación tiene tres estados de autenticación del SDK que controlan cómo Braze verifica las solicitudes.
| Configuración | Descripción |
|---|---|
| Deshabilitado | Braze no verificará el JWT proporcionado para un usuario. (Configuración predeterminada) |
| Opcional | Braze verificará las solicitudes de usuarios con sesión iniciada, pero no rechazará solicitudes no válidas. |
| Obligatorio | Braze verificará las solicitudes de usuarios con sesión iniciada y rechazará los JWT no válidos. |

La configuración Opcional es una forma útil de monitorizar el posible impacto que esta característica tendrá en el tráfico del SDK de tu aplicación.
Un JWT no válido se reportará tanto en los estados Opcional como Obligatorio, sin embargo solo el estado Obligatorio rechazará las solicitudes del SDK, lo que hará que las aplicaciones reintenten y soliciten un nuevo JWT.
Administración de claves públicas
Añadir una clave pública
Puedes añadir hasta tres claves públicas para cada aplicación: una principal, una secundaria y una terciaria. También puedes añadir la misma clave a más de una aplicación si es necesario. Para añadir una clave pública:
- Ve al panel de Braze y selecciona Configuración > Configuración de la aplicación.
- Elige una aplicación de tu lista de aplicaciones disponibles.
- En SDK Authentication, selecciona Add Public Key.
- Introduce una descripción opcional, pega tu clave pública y selecciona Add Public Key.
Asignar una nueva clave primaria
Para asignar una clave secundaria o terciaria como nueva clave primaria:
- Ve al panel de Braze y selecciona Configuración > Configuración de la aplicación.
- Elige una aplicación de tu lista de aplicaciones disponibles.
- En SDK Authentication, elige una clave y selecciona Manage > Make Primary Key.
Eliminar una clave
Para eliminar una clave primaria, asigna primero una nueva primaria y luego elimina tu clave. Para eliminar una clave no primaria:
- Ve al panel de Braze y selecciona Configuración > Configuración de la aplicación.
- Elige una aplicación de tu lista de aplicaciones disponibles.
- En SDK Authentication, elige una clave no primaria y selecciona Manage > Delete Public Key.
Análisis
Cada aplicación mostrará un desglose de los errores de autenticación del SDK recopilados mientras esta característica está en estado Opcional u Obligatoria.
Los datos están disponibles en tiempo real, y puedes pasar el ratón por encima de los puntos del gráfico para ver un desglose de los errores de una fecha determinada.

Códigos de error
| Código de error | Motivo del error | Descripción | Pasos para resolver |
|---|---|---|---|
| 10 | EXPIRATION_REQUIRED |
La caducidad es un campo obligatorio para el uso de Braze. | Añade un campo exp o de caducidad a tu lógica de creación de JWT. |
| 20 | DECODING_ERROR |
Clave pública no coincidente o error general no detectado. | Copia tu JWT en una herramienta de prueba de JWT para diagnosticar por qué tu JWT tiene un formato no válido. |
| 21 | SUBJECT_MISMATCH |
Los sujetos esperados y los reales no son los mismos. | El campo sub debe ser el mismo ID de usuario que se pasa al método changeUser del SDK. |
| 22 | EXPIRED |
El token proporcionado ha caducado. | Amplía tu caducidad o actualiza periódicamente los tokens antes de que caduquen. |
| 23 | INVALID_PAYLOAD |
La carga útil del token no es válida. | Copia tu JWT en una herramienta de prueba de JWT para diagnosticar por qué tu JWT tiene un formato no válido. |
| 24 | INCORRECT_ALGORITHM |
No se admite el algoritmo del token. | Cambia tu JWT para utilizar cifrado RS256. No se admiten otros tipos. |
| 25 | PUBLIC_KEY_ERROR |
No se ha podido convertir la clave pública al formato adecuado. | Copia tu JWT en una herramienta de prueba de JWT para diagnosticar por qué tu JWT tiene un formato no válido. |
| 26 | MISSING_TOKEN |
No se ha proporcionado ningún token en la solicitud. | Asegúrate de que estás pasando un token al llamar a changeUser(id, token) y de que tu token no está en blanco. |
| 27 | NO_MATCHING_PUBLIC_KEYS |
Ninguna clave pública coincide con el token proporcionado. | La clave privada utilizada en el JWT no coincide con ninguna de las claves públicas configuradas para tu aplicación. Confirma que has añadido las claves públicas a la aplicación correcta de tu espacio de trabajo que coincide con esta clave de API. |
| 28 | PAYLOAD_USER_ID_MISMATCH |
No todos los ID de usuario de la carga útil de la solicitud coinciden como se requiere. | Esto es inesperado y puede dar lugar a una carga útil malformada. Abre un ticket de soporte para obtener ayuda. |
Preguntas frecuentes (FAQ)
¿Es necesario habilitar esta característica en todas mis aplicaciones al mismo tiempo?
No, esta característica puede habilitarse para aplicaciones concretas y no es necesario utilizarla en todas tus aplicaciones a la vez.
¿Qué ocurre con los usuarios que siguen utilizando versiones anteriores de mi aplicación?
Cuando empieces a aplicar esta característica, las solicitudes realizadas por versiones anteriores de la aplicación serán rechazadas por Braze y reintentadas por el SDK. Después de que los usuarios actualicen su aplicación a una versión compatible, esas solicitudes en cola empezarán a aceptarse de nuevo.
Si es posible, debes animar a los usuarios a actualizarse como harías con cualquier otra actualización obligatoria. Alternativamente, puedes mantener la característica como Opcional hasta que veas que un porcentaje aceptable de usuarios se ha actualizado.
¿Qué caducidad debo usar al generar un JWT?
Te recomendamos que utilices el valor más alto de la duración media de la sesión, la caducidad de la cookie/token de sesión o la frecuencia con la que tu aplicación actualizaría el perfil del usuario actual.
¿Qué ocurre si un JWT caduca en mitad de la sesión de un usuario?
Si el token de un usuario caduca durante la sesión, el SDK tiene una función de devolución de llamada que invocará para informar a tu aplicación de que se necesita un nuevo JWT para continuar enviando datos a Braze.
¿Qué ocurre si mi integración en servidor se rompe y ya no puedo crear un JWT?
Si tu servidor no puede proporcionar un JWT o detectas algún problema de integración, siempre puedes desactivar la característica en el panel de Braze.
Una vez desactivada, el SDK reintentará cualquier solicitud fallida pendiente, y Braze la aceptará.
¿Por qué esta característica utiliza claves públicas/privadas en lugar de secretos compartidos?
Al utilizar secretos compartidos, cualquiera con acceso a ese secreto compartido, como la página del panel de Braze, podría generar tokens y suplantar la identidad de tus usuarios finales.
En su lugar, utilizamos claves públicas/privadas para que ni siquiera los empleados de Braze (y mucho menos los usuarios de tu empresa) tengan acceso a tus claves privadas.
¿Cómo se reintentan las solicitudes rechazadas?
Cuando una solicitud es rechazada debido a un error de autenticación, el SDK invocará tu devolución de llamada utilizada para actualizar el JWT del usuario.
Las solicitudes se reintentarán periódicamente utilizando una retirada exponencial. Después de 50 intentos fallidos consecutivos, los reintentos se pausarán hasta el siguiente inicio de sesión. Cada SDK también tiene un método para solicitar manualmente un vaciado de datos.
¿Se puede utilizar la autenticación del SDK para usuarios anónimos?
No. La autenticación del SDK funciona cuando tu sitio web confirma la identidad de alguien, por lo que solo se aplica a usuarios identificados. Como usuario anónimo, no hay identidad que confirmar.
La aplicación comienza después de llamar a changeUser. Antes de que un usuario sea identificado (por ejemplo, mientras navega de forma anónima antes de registrarse), el SDK puede seguir enviando datos a Braze sin un JWT. Después de llamar a changeUser, las solicitudes para ese perfil identificado requieren un JWT válido.
Esto significa que un recorrido típico de usuario podría verse así:
- Un usuario visita tu sitio o abre tu aplicación de forma anónima. Braze recopila esta actividad sin un JWT.
- El usuario se registra o inicia sesión, y tu aplicación llama a
changeUsercon unexternal_id. - Braze continúa recopilando la actividad de ese usuario, y la autenticación del SDK se aplica a las solicitudes de ese perfil identificado.
¿Funciona la autenticación del SDK con alias de usuario?
No. La autenticación del SDK requiere un external_id. No puedes configurarla cuando solo hay un braze_id o alias_id disponible, por lo que los perfiles que solo tienen alias no pueden usar la autenticación del SDK.
¿Habilitar la autenticación del SDK bloquea la recopilación de actividad no autenticada?
No. La autenticación del SDK no bloquea la recopilación legítima de actividad anónima. Solo se aplica después de que un perfil es identificado con changeUser.