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ı aşağıdakiler için etkinleştirmenizi öneririz:
  • Kullanıcıları oturum açtırma
  • E-posta abonelikleri ekleme
  • SMS abonelikleri ekleme
  • Kullanıcı kimliklerini değiştirme
Bunu etkinleştirmek için [email protected] ile iletişime geçin.

Önkoşullar

Kurulum

1

Yeni anahtarlar oluşturun

OneSignal hesabınızda oturum açın ve Ayarlar > Anahtarlar ve Kimlikler > Kimlik Doğrulama’ya gidin.

Kimlik Doğrulama yapılandırması

Yeni bir anahtar çifti oluşturmak için Yeni Anahtarlar Oluştur’a tıklayın.

Yeni anahtar çifti oluşturma

PEM dosyasını indirin veya özel anahtarı kopyalayın, özel anahtarı güvenli bir şekilde sakladığınızdan emin olun.

Kimlik Doğrulama anahtar çifti

Özel anahtarlarınızı her zaman anahtar yönetim sistemi gibi güvenli bir ortamda saklayın. Özel anahtarları 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
required
OneSignal Uygulama Kimliğiniz
exp
required
Token’ın son kullanma tarihi.
identity
required
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.

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('APP_ID', '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:
// 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

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.

Enabling Token Identity Verification

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.
  • E-posta ekleyin
  • Telefon numarası ekleyin
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>.