Ana içeriğe atla

Genel Bakış

OneSignal, kullanıcı kimliğine bürünmeyi önlemeye yardımcı olmak için Kimlik Doğrulama adlı gelişmiş bir güvenlik özelliği sunar. Bu özellik, sunucunuzda güvenli bir şekilde oluşturulan JSON Web Token’ları - veya JWT’ler’i kullanır. Abonelik bilgilerini doğrulamak için bu token’lar uygulamanıza ve OneSignal’in API’sine iletilir. Kimlik Doğrulamayı etkinleştirerek korunun:
  • Kullanıcıları oturum açtırma
  • E-posta abonelikleri ekleme
  • SMS abonelikleri ekleme
  • Kullanıcı kimliklerini değiştirme
Kimlik Doğrulama şu anda beta aşamasındadır. Hesabınızda etkinleştirmek için support@onesignal.com ile iletişime geçin. Destek etkinleştirdikten sonra, bunu kontrol panelinizde etkinleştirirsiniz (Adım 5’e bakın).

Önkoşullar

Wrapper SDK desteği (Flutter, React Native, Unity, vb.) yakında geliyor.

Kurulum

1

Yeni anahtarlar oluşturun

OneSignal hesabınızda oturum açın ve Ayarlar > Anahtarlar ve Kimlikler > Kimlik Doğrulama’ya gidin.
Settings page showing Keys and IDs with Identity Verification section
Yeni bir anahtar çifti oluşturmak için Yeni Anahtarlar Oluştur’a tıklayın.
Generate New Keys button in the Identity Verification section
PEM dosyasını indirin veya özel anahtarı kopyalayın, özel anahtarı güvenli bir şekilde sakladığınızdan emin olun.
Identity Verification key pair with private key and PEM download
Özel anahtarlarınızı her zaman anahtar yönetim sistemi gibi güvenli bir ortamda saklayın. Özel anahtarları istemci tarafı kodda, genel depolarda veya günlüklerde asla açığa çıkarmayın.
2

Arka ucunuzda doğrulama JWT'si oluşturun

Kimlik doğrulama, son kullanıcıyı OneSignal’e oturum açtırmadan önce kimlik doğrulama sunucunuzla doğrulamanızı gerektirir. Son kullanıcı arka ucunuzla kimlik doğruladığında, token’ı oluşturun ve cihaza gönderilen kimlik doğrulama yanıtına dahil edin. Uygulamanız bir arka uç sunucusu çalıştırmıyorsa, kullanıcıları doğrulamak ve bu token’ları oluşturmak için hafif bir sunucu kurmayı düşünün.

JWT yükü

JWT aşağıdaki özelliklere sahip olabilir:
iss
gerekli
OneSignal Uygulama Kimliğiniz
exp
gerekli
Token’ın son kullanma tarihi.
identity
gerekli
Kullanıcının takma adı.
subscriptions
Yalnızca bir kullanıcıya E-posta ve SMS abonelikleri eklerken gereklidir.

JWT’yi imzalama

JWT’yi ES256 algoritmasını kullanarak imzalayın. JWT’yi OneSignal’e gönderirken doğrulama sorunlarından kaçınmak için arka ucunuzun bu imzalama yöntemini kullanacak şekilde yapılandırıldığından emin olun. Bunu yapmak için bir JWT Kütüphanesi öneririz.jsonwebtoken kullanan örnek:
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');

Özel anahtar, Kontrol Panelinden indirdiğimiz önceki adımın dosyasındadır.

JWT’nizi doğrulayın

SDK ile entegre etmeden önce, sunucunuzu başlatarak ve uç noktayı çağırarak JWT’nizin doğru oluşturulduğunu doğrulayın:
  node server.js
  curl http://localhost:3000/generate-jwt/your-external-id
Aşağıdaki gibi bir yanıt almalısınız:
{
  "jwt": "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9..."
}
JWT değerini jwt.io adresine yapıştırın ve kodu çözülmüş yükün aşağıdaki parametreleri içerdiğini onaylayın:
{
  "iss": "your-onesignal-app-id",
  "exp": 1234567890,
  "identity": {
    "external_id": "your-external-id"
  }
}
Bir sonraki adıma geçmeden önce aşağıdakileri onaylayın:
  • iss değerinin Settings > Keys & IDs’deki OneSignal Uygulama Kimliğinizle eşleştiğini
  • identity.external_id değerinin mevcut olduğunu ve OneSignal.login()’e ileteceğiniz değerle eşleştiğini
  • exp değerinin gelecekteki bir zaman damgası olduğunu — süresi dolmuş bir token OneSignal tarafından reddedilecektir

Abonelikleri dahil etme

İdeal olarak, e-posta veya telefon numarası gibi abonelik ayrıntıları, bir kullanıcıyı oturum açtırırken JWT yüküne dahil edilir. Bu ayrıntılar önceden mevcut değilse, doğrulama sunucunuz abonelik bilgileri kullanılabilir hale geldikçe token’ları dinamik olarak oluşturmak için bir uç nokta sağlamalıdır.Örnek: Abonelik eklemek için JWT oluşturma
const subscriptions = [
  {
      "type": "Email",
      "token": "[email protected]"
  },
  {
      "type": "SMS",
      "token": "+12345678"
  }
]
const onesignalJWT = signOneSignalJWT('EXTERNAL_ID', subscriptions)
3

`login` yöntemine JWT'yi iletin

Arka ucunuz JWT’yi oluşturduktan sonra, bununla login yöntemini çağırın. Bu token, e-posta veya SMS aboneliği ekleme gibi herhangi bir değişiklik yapılmadan önce kullanıcının kimliğinin doğrulanmasını sağlar.Oturum açma örneği:
String externalId = "YOUR_EXTERNAL_ID";
String onesignalJWT = "YOUR_JWT_TOKEN";

OneSignal.login(externalId, onesignalJWT);
4

Handle JWT lifecycle events

You’ll need to implement a dedicated endpoint on your backend to handle scenarios like token invalidation. This endpoint should provide a refreshed JWT when OneSignal requests an update.Example of handling token invalidation and refreshing the 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);
});
This ensures that when a user’s JWT is invalidated, a new one can be fetched from your backend and passed to OneSignal. You can also use this function to generate a token with an email and phone number, allowing you to manage email and SMS subscriptions if the token created during authentication does not contain them.
5

Enable token identity verification in the dashboard

From Settings > Keys & IDs, toggle Token Identity Verification to enable.
Token Identity Verification toggle enabled in dashboard settings
Etkinleştirildikten sonra, uygulamanızın abonelik özgünlüğünü doğrulamak için OneSignal JWT’lerini göndermesi gerekir. Ek olarak, uygulamanızın kimlik doğrulama token sunucunuz tarafından oluşturulan bir JWT kullanarak login yöntemini çağırması gerekir.

Abonelik ekleme

Mobil uygulamanızdan abonelik eklemek için ekstra adımlar atmanıza gerek yoktur; login yöntemini çağırmak bunu sizin için otomatik olarak halleder.
OneSignal.getUser().addEmail(emailAddress);

REST API

Token Kimlik Doğrulama etkinleştirildiğinde, aşağıdaki API’lere yapılan tüm istekler başlıklarda bir bearer token olarak sunucu tarafından oluşturulan bir JWT içermelidir, örneğin, Authorization: Bearer <JWT>.

SSS

Kimlik doğrulama gerekli midir?

Hayır, ancak şiddetle tavsiye edilir. Olmadan, bir kullanıcının Harici Kimliğini bilen herhangi bir istemci o kullanıcının kimliğine bürünebilir ve aboneliklerini veya verilerini değiştirebilir.

Oturum sırasında JWT süresi dolarsa ne olur?

SDK bir JWT geçersizleştirme olayı tetikler. Arka ucunuzdan yenilenmiş bir token almak ve updateUserJwt’ye iletmek için addUserJwtInvalidatedListener’ı uygulayın (JWT yaşam döngüsü olaylarını işleme bölümüne bakın).

Hangi SDK’lar kimlik doğrulamayı destekler?

Şu anda yerel Android SDK (5.2.0+) ve iOS SDK (5.3.0+). Wrapper SDK desteği (Flutter, React Native, Unity, vb.) yakında geliyor.

REST API için kimlik doğrulama gerekli midir?

Token Kimlik Doğrulama etkinleştirildiğinde, desteklenen API’lere yapılan tüm istekler Authorization başlığında bearer token olarak sunucu tarafından oluşturulan bir JWT içermelidir. JWT, SDK kullanımıyla aynı şekilde oluşturulur.

JWT hangi algoritmayı kullanır?

Kimlik Doğrulama, ES256 algoritmasıyla (P-256 ve SHA-256 kullanan ECDSA) imzalanmış JWT’ler gerektirir. Diğer algoritmalar reddedilecektir.