Firebase Authentication with Identity Platform sürümüne yükselttiyseniz kullanıcılarınızın kimliğini, OpenID Connect (OIDC) uyumlu istediğiniz sağlayıcıyı kullanarak Firebase ile doğrulayabilirsiniz. Bu sayede, Firebase tarafından yerel olarak desteklenmeyen kimlik sağlayıcıları kullanmak mümkün olur.
Başlamadan önce
Kullanıcıların oturumunu bir OIDC sağlayıcısını kullanarak açmak için önce sağlayıcıdan bazı bilgiler toplamanız gerekir:
İstemci kimliği: Uygulamanızı tanımlayan, sağlayıcıya özgü bir dizedir. Sağlayıcınız, desteklediğiniz her platform için size farklı bir istemci kimliği atayabilir. Bu, sağlayıcınız tarafından verilen kimlik jetonlarındaki
audtalebinin değerlerinden biridir.İstemci gizli anahtarı: Sağlayıcının, istemci kimliğinin sahipliğini doğrulamak için kullandığı gizli dize. Her istemci kimliği için eşleşen bir istemci gizli anahtarı gerekir. (Bu değer yalnızca yetkilendirme kodu akışını kullanıyorsanız gereklidir. Bu akışın kullanılması önemle tavsiye edilir.)
Düzenleyen: Sağlayıcınızı tanımlayan bir dize. Bu değer,
/.well-known/openid-configurationile eklendiğinde sağlayıcının OIDC keşif belgesinin konumu olan bir URL olmalıdır. Örneğin, yayınlayanhttps://auth.example.comise keşif belgesihttps://auth.example.com/.well-known/openid-configurationadresinde bulunmalıdır.
Yukarıdaki bilgilere sahip olduktan sonra Firebase projeniz için OpenID Connect'i oturum açma sağlayıcısı olarak etkinleştirin:
Firebase Authentication with Identity Platform sürümüne yükseltmediyseniz yükseltin. OpenID Connect kimlik doğrulaması yalnızca yükseltilmiş projelerde kullanılabilir.
Firebase konsolunun Oturum açma sağlayıcıları sayfasında Yeni sağlayıcı ekle'yi ve ardından OpenID Connect'i tıklayın.
Yetkilendirme kodu akışını mı yoksa dolaylı izin akışını mı kullanacağınızı seçin.
Sağlayıcınız destekliyorsa her zaman kod akışını kullanmalısınız. Örtülü akış daha az güvenlidir ve kullanılması kesinlikle önerilmez.
Bu sağlayıcıya bir ad verin. Oluşturulan sağlayıcı kimliğini not edin:
oidc.example-providergibi. Uygulamanıza oturum açma kodu eklerken bu kimliğe ihtiyacınız olur.İstemci kimliğinizi, istemci gizli anahtarınızı ve sağlayıcınızın veren dizesini belirtin. Bu değerler, sağlayıcınızın size atadığı değerlerle tam olarak eşleşmelidir.
Yaptığınız değişiklikleri kaydedin.
Firebase SDK ile oturum açma akışını yönetme
OIDC sağlayıcınızı kullanarak Firebase ile kullanıcılarınızın kimliğini doğrulamanın en kolay yolu, oturum açma akışının tamamını Firebase SDK ile yönetmektir.
Oturum açma akışını Firebase Apple platformları SDK'sı ile işlemek için şu adımları uygulayın:
Xcode projenize özel URL şemaları ekleyin:
- Proje yapılandırmanızı açın: Soldaki ağaç görünümünde proje adını çift tıklayın. HEDEFLER bölümünden uygulamanızı seçin, ardından Bilgi sekmesini seçip URL Türleri bölümünü genişletin.
- + düğmesini tıklayın ve kodlanmış uygulama kimliğinizi URL şeması olarak ekleyin. Kodlanmış uygulama kimliğinizi Firebase konsolunun Genel Ayarlar sayfasındaki iOS uygulamanızın bölümünde bulabilirsiniz. Diğer alanları boş bırakın.
İşlem tamamlandığında yapılandırmanız aşağıdaki gibi görünmelidir (ancak uygulamaya özel değerlerinizle birlikte):
Firebase konsolunda aldığınız sağlayıcı kimliğini kullanarak bir
OAuthProviderörneği oluşturun.Swift
var provider = OAuthProvider(providerID: "oidc.example-provider")Objective-C
FIROAuthProvider *provider = [FIROAuthProvider providerWithProviderID:@"oidc.example-provider"];İsteğe bağlı: OAuth isteğiyle göndermek istediğiniz ek özel OAuth parametrelerini belirtin.
Swift
provider.customParameters = [ "login_hint": "user@example.com" ]Objective-C
[provider setCustomParameters:@{@"login_hint": @"user@example.com"}];Sağlayıcınızın desteklediği parametreler hakkında bilgi edinin. Firebase'in gerektirdiği parametreleri
setCustomParametersile iletemeyeceğinizi unutmayın. Bu parametrelerclient_id,response_type,redirect_uri,state,scopeveresponse_mode'dir.İsteğe bağlı: Kimlik doğrulama sağlayıcıdan istemek istediğiniz temel profilin ötesindeki ek OAuth 2.0 kapsamlarını belirtin.
Swift
provider.scopes = ["mail.read", "calendars.read"]Objective-C
[provider setScopes:@[@"mail.read", @"calendars.read"]];Desteklenen kapsamlar için sağlayıcınıza danışın.
İsteğe bağlı: Uygulamanızın, kullanıcıya reCAPTCHA'yı gösterirken
SFSafariViewControllerveyaUIWebViewöğelerini sunma şeklini özelleştirmek istiyorsanızAuthUIDelegateprotokolüne uygun özel bir sınıf oluşturun.OAuth sağlayıcı nesnesini kullanarak Firebase ile kimlik doğrulayın.
Swift
// If you created a custom class that conforms to AuthUIDelegate, // pass it instead of nil: provider.getCredentialWith(nil) { credential, error in if error != nil { // Handle error. } if credential != nil { Auth().signIn(with: credential) { authResult, error in if error != nil { // Handle error. } // User is signed in. // IdP data available in authResult.additionalUserInfo.profile. // OAuth access token can also be retrieved: // (authResult.credential as? OAuthCredential)?.accessToken // OAuth ID token can also be retrieved: // (authResult.credential as? OAuthCredential)?.idToken } } }Objective-C
// If you created a custom class that conforms to AuthUIDelegate, // pass it instead of nil: [provider getCredentialWithUIDelegate:nil completion:^(FIRAuthCredential *_Nullable credential, NSError *_Nullable error) { if (error) { // Handle error. } if (credential) { [[FIRAuth auth] signInWithCredential:credential completion:^(FIRAuthDataResult *_Nullable authResult, NSError *_Nullable error) { if (error) { // Handle error. } // User is signed in. // IdP data available in authResult.additionalUserInfo.profile. // OAuth access token can also be retrieved: // ((FIROAuthCredential *)authResult.credential).accessToken // OAuth ID token can also be retrieved: // ((FIROAuthCredential *)authResult.credential).idToken }]; } }];Yukarıdaki örnekler oturum açma akışlarına odaklanırken
linkWithCredentialkullanarak OIDC sağlayıcıyı mevcut bir kullanıcıya bağlama olanağına da sahipsiniz. Örneğin, aynı kullanıcıya birden fazla sağlayıcı bağlayarak kullanıcının her ikisiyle de oturum açmasına izin verebilirsiniz.Swift
Auth().currentUser.link(withCredential: credential) { authResult, error in if error != nil { // Handle error. } // OIDC credential is linked to the current user. // IdP data available in authResult.additionalUserInfo.profile. // OAuth access token can also be retrieved: // (authResult.credential as? OAuthCredential)?.accessToken // OAuth ID token can also be retrieved: // (authResult.credential as? OAuthCredential)?.idToken }Objective-C
[[FIRAuth auth].currentUser linkWithCredential:credential completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { if (error) { // Handle error. } // OIDC credential is linked to the current user. // IdP data available in authResult.additionalUserInfo.profile. // OAuth access token can also be retrieved: // ((FIROAuthCredential *)authResult.credential).accessToken // OAuth ID token can also be retrieved: // ((FIROAuthCredential *)authResult.credential).idToken }];Aynı kalıp, son giriş gerektiren hassas işlemler için yeni kimlik bilgileri almak üzere kullanılabilen
reauthenticateWithCredentialile de kullanılabilir.Swift
Auth().currentUser.reauthenticateWithCredential(withCredential: credential) { authResult, error in if error != nil { // Handle error. } // User is re-authenticated with fresh tokens minted and // should be able to perform sensitive operations like account // deletion and email or password update. // IdP data available in result.additionalUserInfo.profile. // Additional OAuth access token can also be retrieved: // (authResult.credential as? OAuthCredential)?.accessToken // OAuth ID token can also be retrieved: // (authResult.credential as? OAuthCredential)?.idToken }Objective-C
[[FIRAuth auth].currentUser reauthenticateWithCredential:credential completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { if (error) { // Handle error. } // User is re-authenticated with fresh tokens minted and // should be able to perform sensitive operations like account // deletion and email or password update. // IdP data available in result.additionalUserInfo.profile. // Additional OAuth access token can also be retrieved: // ((FIROAuthCredential *)authResult.credential).accessToken // OAuth ID token can also be retrieved: // ((FIROAuthCredential *)authResult.credential).idToken }];
Oturum açma akışını manuel olarak işleme
Uygulamanızda OpenID Connect oturum açma akışını zaten uyguladıysanız Firebase ile kimlik doğrulamak için doğrudan kimlik jetonunu kullanabilirsiniz:
Swift
let credential = OAuthProvider.credential(
withProviderID: "oidc.example-provider", // As registered in Firebase console.
idToken: idToken, // ID token from OpenID Connect flow.
rawNonce: nil
)
Auth.auth().signIn(with: credential) { authResult, error in
if error {
// Handle error.
return
}
// User is signed in.
// IdP data available in authResult?.additionalUserInfo?.profile
}
Objective-C
FIROAuthCredential *credential =
[FIROAuthProvider credentialWithProviderID:@"oidc.example-provider" // As registered in Firebase console.
IDToken:idToken // ID token from OpenID Connect flow.
rawNonce:nil];
[[FIRAuth auth] signInWithCredential:credential
completion:^(FIRAuthDataResult * _Nullable authResult,
NSError * _Nullable error) {
if (error != nil) {
// Handle error.
return;
}
// User is signed in.
// IdP data available in authResult.additionalUserInfo.profile
}];
Sonraki adımlar
Bir kullanıcı ilk kez oturum açtıktan sonra yeni bir kullanıcı hesabı oluşturulur ve kullanıcının oturum açtığı kimlik bilgilerine (kullanıcı adı ve şifre, telefon numarası veya kimlik doğrulama sağlayıcı bilgileri) bağlanır. Bu yeni hesap, Firebase projenizin bir parçası olarak depolanır ve kullanıcının nasıl oturum açtığına bakılmaksızın projenizdeki her uygulamada kullanıcıyı tanımlamak için kullanılabilir.
-
Uygulamalarınızda, kullanıcının temel profil bilgilerini
Usernesnesinden alabilirsiniz. Kullanıcıları yönetme başlıklı makaleyi inceleyin. Firebase Realtime Database ve Cloud Storage Güvenlik Kurallarınızda, oturum açmış kullanıcının benzersiz kullanıcı kimliğini
authdeğişkeninden alabilir ve kullanıcının hangi verilere erişebileceğini kontrol etmek için bu kimliği kullanabilirsiniz.
Kimlik doğrulama sağlayıcı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlayarak kullanıcıların uygulamanızda birden fazla kimlik doğrulama sağlayıcı kullanarak oturum açmasına izin verebilirsiniz.
Bir kullanıcının oturumunu kapatmak için
signOut: işlevini çağırın.
Swift
let firebaseAuth = Auth.auth() do { try firebaseAuth.signOut() } catch let signOutError as NSError { print("Error signing out: %@", signOutError) }
Objective-C
NSError *signOutError; BOOL status = [[FIRAuth auth] signOut:&signOutError]; if (!status) { NSLog(@"Error signing out: %@", signOutError); return; }
Ayrıca, tüm kimlik doğrulama hataları için hata işleme kodu eklemek de isteyebilirsiniz. Hataları İşleme bölümüne bakın.