Pular para o conteúdo principal

Visão Geral

O OneSignal oferece um recurso de segurança aprimorado chamado Verificação de Identidade para ajudar a prevenir personificação de usuário. Este recurso utiliza JSON Web Tokens – ou JWTs, gerados com segurança em seu servidor. Para verificar informações de assinatura, esses tokens são passados para seu aplicativo e API do OneSignal. Recomendamos habilitar a Verificação de Identidade para:
  • Fazer login de usuários
  • Adicionar assinaturas de email
  • Adicionar assinaturas de SMS
  • Modificar identidades de usuário
Entre em contato com support@onesignal.com para habilitar isso.

Pré-requisitos

Configuração

1

Gerar novas chaves

Faça login em sua conta OneSignal e navegue até Settings > Keys & IDs > Identity Verification.

Configuração de Verificação de Identidade

Clique em Generate New Keys para criar um novo par de chaves.

Criando novo par de chaves

Baixe o arquivo PEM ou copie a chave privada, certificando-se de armazenar a chave privada com segurança.

Par de chaves de Verificação de Identidade

Sempre armazene suas chaves privadas em um ambiente seguro, como um sistema de gerenciamento de chaves. Nunca exponha chaves privadas
2

Gerar JWT de verificação em seu backend

A verificação de identidade requer autenticar o usuário final com seu servidor de autenticação antes de fazer login no OneSignal. Quando o usuário final autentica com seu backend, gere o token e inclua-o na resposta de autenticação para o dispositivo. Se seu aplicativo não executar um servidor backend, considere configurar um servidor leve para verificar usuários e gerar esses tokens.

Payload do JWT

O JWT pode ter as seguintes propriedades:
iss
required
Seu OneSignal App ID
exp
required
A data de expiração do token.
identity
required
O alias do usuário.
subscriptions
Obrigatório apenas ao adicionar assinaturas de Email e SMS a um usuário.

Assinar o JWT

Assine o JWT usando o algoritmo ES256. Certifique-se de que seu backend está configurado para usar este método de assinatura para evitar problemas de verificação ao enviar o JWT para o OneSignal. Recomendamos uma Biblioteca JWT para fazer isso.Exemplo 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');

A chave privada está no arquivo da etapa anterior que baixamos do Painel.

Incluindo assinaturas

Idealmente, detalhes de assinatura, como email ou número de telefone, são incluídos no payload do JWT ao fazer login de um usuário. Se esses detalhes não estiverem disponíveis antecipadamente, seu servidor de verificação deve fornecer um endpoint para gerar tokens dinamicamente conforme as informações de assinatura ficam disponíveis.Exemplo: Gerar JWT para adicionar assinaturas
const subscriptions = [
  {
      "type": "Email",
      "token": "[email protected]"
  },
  {
      "type": "SMS",
      "token": "+12345678"
  }
]
const onesignalJWT = signOneSignalJWT('APP_ID', 'EXTERNAL_ID', subscriptions)
3

Passar JWT para o método `login`

Depois que seu backend gerar o JWT, chame o método login com ele. Este token garante que a identidade do usuário seja verificada antes que quaisquer alterações, como adicionar uma assinatura de email ou SMS, possam ser feitas.Exemplo de fazer login:
// 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

Manipular eventos do ciclo de vida do JWT

Você precisará implementar um endpoint dedicado em seu backend para lidar com cenários como invalidação de token. Este endpoint deve fornecer um JWT atualizado quando o OneSignal solicitar uma atualização.Exemplo de lidar com invalidação de token e atualizar o 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);
});
Isso garante que quando o JWT de um usuário for invalidado, um novo possa ser buscado do seu backend e passado para o OneSignal. Você também pode usar esta função para gerar um token com email e número de telefone, permitindo que você gerencie assinaturas de email e SMS se o token criado durante a autenticação não os contiver.
5

Habilitar verificação de identidade de token no painel

Em Settings > Keys & IDs, alterne Token Identity Verification para habilitar.

Habilitando Token Identity Verification

Uma vez habilitado, seu aplicativo deve enviar JWTs do OneSignal para verificar a autenticidade da assinatura. Além disso, seu aplicativo é obrigado a chamar o método login usando um JWT gerado pelo seu servidor de token de verificação de identidade.

Adicionar assinaturas

Você não precisa realizar etapas extras para adicionar assinaturas do seu aplicativo móvel; chamar o método de login lida automaticamente com isso para você.
  • Adicionar um email
  • Adicionar um número de telefone
OneSignal.getUser().addEmail(emailAddress);

API REST

Quando a Verificação de Identidade de Token está habilitada, todas as solicitações para as seguintes APIs devem incluir um JWT gerado pelo servidor nos cabeçalhos como um token de portador, por exemplo, Authorization: Bearer <JWT>.