OneSignal’e gönderilen Harici Kullanıcı Kimliklerini, e-posta ve SMS aboneliklerini doğrulamak için sunucu tarafından oluşturulan JWT’ler gerektirerek kullanıcı kimliğine bürünmeyi önleyin.
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).
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ı 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’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 IDfunction signOneSignalJWT(externalId, subscriptions) {return jwt.sign({iss: APP_ID,exp: Math.floor(Date.now() / 1000) + 3600, // 1-hour expirationidentity: {'external_id': externalId,},subscriptions},IDENTITY_VERIFICATION_SECRET,{ algorithm: 'ES256' });}// Pass this token to your mobile app to use with the `login` SDK methodconst onesignalJWT = signOneSignalJWT('EXTERNAL_ID');
Özel anahtar, Kontrol Panelinden indirdiğimiz önceki adımın dosyasındadır.
İ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
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:
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);});
OneSignal.addUserJwtInvalidatedListener( object : IUserJwtInvalidatedListener { override fun onUserJwtInvalidated(event: UserJwtInvalidatedEvent) { val externalId = event.externalId val onesignalJWT = "" updateUserJwt(externalId, onesignalJWT) } },)
class AppDelegate: UIResponder, UIApplicationDelegate, OSUserJwtInvalidatedListener { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil) -> Bool { // Set self to listen for JWT invalidated events OneSignal.addUserJwtInvalidatedListener(self) // Remove the JWT listener as needed by calling: // `OneSignal.removeUserJwtInvalidatedListener(self)` } // Required to conform to `OSUserJwtInvalidatedListener` protocol func onUserJwtInvalidated(event: OneSignalUser.OSUserJwtInvalidatedEvent) { // Get the expired user's External ID let externalId = event.externalId // Fetch a new JWT from your backend for the user let onesignalJWT = "yourUpdatedToken" // Provide the new JWT to the SDK OneSignal.updateUserJwt(externalId: externalId, token: onesignalJWT) }}
@interface MyListener: NSObject<OSUserJwtInvalidatedListener>@end@implementation MyListener- (void)onUserJwtInvalidatedWithEvent:(OSUserJwtInvalidatedEvent * _Nonnull)event { // Get the expired user's External ID NSString *externalId = event.externalId; // Fetch a new JWT from your backend for the user NSString *onesignalJWT = @"yourUpdatedToken"; // Provide the new JWT to the SDK [OneSignal updateUserJwt:externalId withToken:onesignalJWT];}// Add or remove your User Jwt Invalidated Listener[OneSignal addUserJwtInvalidatedListener:myListener];[OneSignal removeUserJwtInvalidatedListener:myListener];
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.
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);
OneSignal.getUser().addEmail(emailAddress)
// If you have not already included it in your JWT token, update the JWT with the emaillet onesignalJWT = "newTokenThatContainsTheEmailToAdd"OneSignal.updateUserJwt(externalId: externalId, token: onesignalJWT)// Add the emailOneSignal.User.addEmail(emailAddress)
// If you have not already included it in your JWT token, update the JWT with the emailNSString *onesignalJWT = @"newTokenThatContainsTheEmailToAdd";[OneSignal updateUserJwt:externalId withToken:onesignalJWT];// Add the email[OneSignal.User addEmail:emailAddress];
OneSignal.getUser().addSms(smsNumber);
OneSignal.getUser().addSms(smsNumber)
// If you have not already included it in your JWT token, update the JWT with the smslet onesignalJWT = "newTokenThatContainsTheSmsToAdd"OneSignal.updateUserJwt(externalId: externalId, token: onesignalJWT)// Add the sms numberOneSignal.User.addSms(smsNumber)
// If you have not already included it in your JWT token, update the JWT with the smsNSString *onesignalJWT = @"newTokenThatContainsTheSmsToAdd";[OneSignal updateUserJwt:externalId withToken:onesignalJWT];// Add the sms number[OneSignal.User addSms:smsNumber];
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>.
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.
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).
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.