Passer au contenu principal

Aperçu

OneSignal offre une fonctionnalité de sécurité améliorée appelée vérification d’identité pour aider à prévenir l’usurpation d’identité des utilisateurs. Cette fonctionnalité utilise des jetons Web JSON – ou JWT, générés de manière sécurisée sur votre serveur. Pour vérifier les informations d’abonnement, ces jetons sont transmis à votre application et à l’API de OneSignal. Nous recommandons d’activer la vérification d’identité pour :
  • Connecter les utilisateurs
  • Ajouter des abonnements email
  • Ajouter des abonnements SMS
  • Modifier les identités des utilisateurs
Contactez support@onesignal.com pour activer cette fonctionnalité.

Prérequis

Configuration

1

Générer de nouvelles clés

Connectez-vous à votre compte OneSignal et accédez à Paramètres > Clés et ID > Vérification d’identité.

Configuration de la vérification d'identité

Cliquez sur Générer de nouvelles clés pour créer une nouvelle paire de clés.

Création d'une nouvelle paire de clés

Téléchargez le fichier PEM ou copiez la clé privée, en veillant à stocker la clé privée en toute sécurité.

Paire de clés de vérification d'identité

Stockez toujours vos clés privées dans un environnement sécurisé, tel qu’un système de gestion de clés. N’exposez jamais les clés privées
2

Générer un JWT de vérification sur votre backend

La vérification d’identité nécessite d’authentifier l’utilisateur final avec votre serveur d’authentification avant de le connecter à OneSignal. Lorsque l’utilisateur final s’authentifie auprès de votre backend, générez le jeton et incluez-le dans la réponse d’authentification à l’appareil. Si votre application n’exécute pas de serveur backend, envisagez de mettre en place un serveur léger pour vérifier les utilisateurs et générer ces jetons.

Charge utile JWT

Le JWT peut avoir les propriétés suivantes :
iss
required
Votre ID d’application OneSignal
exp
required
La date d’expiration du jeton.
identity
required
L’alias de l’utilisateur.
subscriptions
Requis uniquement lors de l’ajout d’abonnements email et SMS à un utilisateur.

Signature du JWT

Signez le JWT en utilisant l’algorithme ES256. Assurez-vous que votre backend est configuré pour utiliser cette méthode de signature afin d’éviter les problèmes de vérification lors de l’envoi du JWT à OneSignal. Nous recommandons une bibliothèque JWT pour ce faire.Exemple utilisant 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 clé privée se trouve dans le fichier de l’étape précédente que nous avons téléchargé depuis le tableau de bord.

Inclusion des abonnements

Idéalement, les détails d’abonnement, tels que l’email ou le numéro de téléphone, sont inclus dans la charge utile JWT lors de la connexion d’un utilisateur. Si ces détails ne sont pas disponibles au départ, votre serveur de vérification doit fournir un endpoint pour générer des jetons dynamiquement à mesure que les informations d’abonnement deviennent disponibles.Exemple : Génération de JWT pour ajouter des abonnements
const subscriptions = [
  {
      "type": "Email",
      "token": "[email protected]"
  },
  {
      "type": "SMS",
      "token": "+12345678"
  }
]
const onesignalJWT = signOneSignalJWT('APP_ID', 'EXTERNAL_ID', subscriptions)
3

Transmettre le JWT à la méthode `login`

Une fois que votre backend génère le JWT, appelez la méthode login avec celui-ci. Ce jeton garantit que l’identité de l’utilisateur est vérifiée avant que des modifications, telles que l’ajout d’un abonnement email ou SMS, puissent être effectuées.Exemple de connexion :
// 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

Gérer les événements du cycle de vie JWT

Vous devrez implémenter un endpoint dédié sur votre backend pour gérer des scénarios tels que l’invalidation de jetons. Cet endpoint doit fournir un JWT actualisé lorsque OneSignal demande une mise à jour.Exemple de gestion de l’invalidation de jeton et de rafraîchissement du 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);
});
Cela garantit que lorsque le JWT d’un utilisateur est invalidé, un nouveau peut être récupéré depuis votre backend et transmis à OneSignal. Vous pouvez également utiliser cette fonction pour générer un jeton avec un email et un numéro de téléphone, vous permettant de gérer les abonnements email et SMS si le jeton créé lors de l’authentification ne les contient pas.
5

Activer la vérification d'identité par jeton dans le tableau de bord

Dans Paramètres > Clés et ID, activez Vérification d’identité par jeton.

Activation de la vérification d'identité par jeton

Une fois activée, votre application doit envoyer des JWT OneSignal pour vérifier l’authenticité de l’abonnement. De plus, votre application est tenue d’appeler la méthode login en utilisant un JWT généré par votre serveur de jetons de vérification d’identité.

Ajout d’abonnements

Vous n’avez pas besoin de prendre de mesures supplémentaires pour ajouter des abonnements depuis votre application mobile ; l’appel de la méthode login le gère automatiquement pour vous.
  • Ajouter un email
  • Ajouter un numéro de téléphone
OneSignal.getUser().addEmail(emailAddress);

API REST

Lorsque la vérification d’identité par jeton est activée, toutes les requêtes vers les API suivantes doivent inclure un JWT généré par le serveur dans les en-têtes en tant que jeton porteur, par exemple, Authorization: Bearer <JWT>.