Saltar al contenido principal

Descripción general

OneSignal ofrece una función de seguridad mejorada llamada Verificación de Identidad para ayudar a prevenir la suplantación de usuarios. Esta función utiliza JSON Web Tokens, o JWTs, generados de forma segura en tu servidor. Para verificar la información de suscripción, estos tokens se pasan a tu aplicación y a la API de OneSignal. Recomendamos habilitar la Verificación de Identidad para:
  • Iniciar sesión de usuarios
  • Agregar suscripciones de correo electrónico
  • Agregar suscripciones de SMS
  • Modificar identidades de usuarios
Contacta a [email protected] para que esto sea habilitado.

Requisitos previos

Configuración

1

Generar nuevas claves

Inicia sesión en tu cuenta de OneSignal y navega a Configuración > Claves e IDs > Verificación de Identidad.

Configuración de Verificación de Identidad

Haz clic en Generar Nuevas Claves para crear un nuevo par de claves.

Creación de nuevo par de claves

Descarga el archivo PEM o copia la clave privada, asegurándote de almacenar la clave privada de forma segura.

Par de claves de Verificación de Identidad

Siempre almacena tus claves privadas en un entorno seguro, como un sistema de gestión de claves. Nunca expongas claves privadas en
2

Generar JWT de verificación en tu backend

La verificación de identidad requiere autenticar al usuario final con tu servidor de autenticación antes de iniciar sesión en OneSignal. Cuando el usuario final se autentica con tu backend, genera el token e inclúyelo en la respuesta de autenticación al dispositivo. Si tu aplicación no ejecuta un servidor backend, considera configurar un servidor ligero para verificar usuarios y generar estos tokens.

Carga útil JWT

El JWT puede tener las siguientes propiedades:
iss
required
Tu ID de Aplicación de OneSignal
exp
required
La fecha de expiración del token.
identity
required
El alias del usuario.
subscriptions
Requerido solo cuando se agregan suscripciones de Correo electrónico y SMS a un usuario.

Firmar el JWT

Firma el JWT usando el algoritmo ES256. Asegúrate de que tu backend esté configurado para usar este método de firma para evitar problemas de verificación al enviar el JWT a OneSignal. Recomendamos una Biblioteca JWT para hacer esto.Ejemplo usando jsonwebtoken:
import jwt from 'jsonwebtoken';

const APP_ID = process.env['ONESIGNAL_APP_ID']
const IDENTITY_VERIFICATION_SECRET = process.env['ONESIGNAL_IDENTITY_VERIFICATION_SECRET_KEY']

// Generates JWT, potentially with subscription claims, for the user identified by the External ID
function signOneSignalJWT(externalId, subscriptions) {
return jwt.sign({
iss: APP_ID,
exp: Math.floor(Date.now() / 1000) + 3600, // 1-hour expiration
identity: {
'external_id': externalId,
},
subscriptions
},
IDENTITY_VERIFICATION_SECRET,
{ algorithm: 'ES256' });
}

// Pass this token to your mobile app to use with the `login` SDK method
const onesignalJWT = signOneSignalJWT('EXTERNAL_ID');

La clave privada está en el archivo del paso anterior que descargamos del Panel.

Incluir suscripciones

Idealmente, los detalles de suscripción, como correo electrónico o número de teléfono, se incluyen en la carga útil JWT al iniciar sesión de un usuario. Si estos detalles no están disponibles por adelantado, tu servidor de verificación debe proporcionar un endpoint para generar tokens dinámicamente a medida que la información de suscripción esté disponible.Ejemplo: Generar JWT para agregar suscripciones
const subscriptions = [
  {
      "type": "Email",
      "token": "[email protected]"
  },
  {
      "type": "SMS",
      "token": "+12345678"
  }
]
const onesignalJWT = signOneSignalJWT('APP_ID', 'EXTERNAL_ID', subscriptions)
3

Pasar JWT al método `login`

Una vez que tu backend genera el JWT, llama al método login con él. Este token asegura que la identidad del usuario sea verificada antes de que se puedan hacer cambios, como agregar una suscripción de correo electrónico o SMS.Ejemplo de inicio de sesión:
// The External ID comes from your backend
String externalId = "123456789";

// The JWT is generated on your backend using the authenticated user's
// External ID or any other custom aliases you may have set.
String onesignalJWT = "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiI3OGUzMjA4Mi1lYTI3LTQyZTMtYTg5OC1jNzJlMTQxODI0ZWEiLCJleHAiOjE2NTc3NzU4NzIsImlkZW50aXR5Ijp7ImFsaWFzX2xhYmVsX2V4YW1wbGUiOiJhbGlhc19pZF9leGFtcGxlIn0sInN1YnNjcmlwdGlvbnMiOlt7InR5cGUiOiJFbWFpbCIsInRva2VuIjoidGVzdEBkb21haW4uY29tIn0seyJ0eXBlIjoiU01TIiwidG9rZW4iOiIrMTIzNDU2NzgifV19.\_iazvUy6krturWicV1eXqPzptzIB8y_GmvDXfFp6OXNxiLvI2wRkWS5iH_gJWPmyZc48KLpJXgR2RT6Jn8_5Aw"

OneSignal.login(externalId, onesignalJWT);

4

Manejar eventos del ciclo de vida del JWT

Necesitarás implementar un endpoint dedicado en tu backend para manejar escenarios como la invalidación de tokens. Este endpoint debe proporcionar un JWT actualizado cuando OneSignal solicite una actualización.Ejemplo de manejo de invalidación de token y actualización del JWT:
OneSignal.addUserJwtInvalidatedListener(event -> {
  // Get the expired user's External ID
  String externalId = event.getExternalId();

  // Fetch a new JWT from your backend for the user
  String onesignalJWT = "yourUpdatedToken";

  // Provide the new JWT to the SDK
  OneSignal.updateUserJwt(externalId, onesignalJWT);
});
Esto asegura que cuando el JWT de un usuario se invalide, se pueda obtener uno nuevo de tu backend y pasarlo a OneSignal. También puedes usar esta función para generar un token con un correo electrónico y número de teléfono, permitiéndote gestionar suscripciones de correo electrónico y SMS si el token creado durante la autenticación no los contiene.
5

Habilitar verificación de identidad de token en el panel

Desde Configuración > Claves e IDs, activa Verificación de Identidad de Token para habilitar.

Habilitando Verificación de Identidad de Token

Una vez habilitado, tu aplicación debe enviar JWTs de OneSignal para verificar la autenticidad de la suscripción. Además, tu aplicación debe llamar al método login usando un JWT generado por tu servidor de tokens de verificación de identidad.

Agregar suscripciones

No necesitas tomar pasos adicionales para agregar suscripciones desde tu aplicación móvil; llamar al método de inicio de sesión maneja esto automáticamente por ti.
  • Agregar un correo electrónico
  • Agregar un número de teléfono
OneSignal.getUser().addEmail(emailAddress);

REST API

Cuando la Verificación de Identidad de Token está habilitada, todas las solicitudes a las siguientes APIs deben incluir un JWT generado por el servidor en los encabezados como un token bearer, ej., Authorization: Bearer <JWT>.