Uçtan uca oturum açma akışı gerçekleştirmek için Firebase SDK'sı ile web tabanlı genel OAuth Girişini uygulamanıza entegre ederek kullanıcılarınızın Microsoft Azure Active Directory gibi OAuth sağlayıcıları kullanarak Firebase ile kimlik doğrulaması yapmasını sağlayabilirsiniz.
Başlamadan önce
Microsoft hesaplarını (Azure Active Directory ve kişisel Microsoft hesapları) kullanarak kullanıcıların oturumunu açmak için önce Firebase projenizde oturum açma sağlayıcısı olarak Microsoft'u etkinleştirmeniz gerekir:
- Firebase'i Apple projenize ekleyin.
- Firebase konsolunda Auth bölümünü açın.
- Oturum açma yöntemi sekmesinde Microsoft sağlayıcısını etkinleştirin.
- Söz konusu sağlayıcının geliştirici konsolundan İstemci Kimliği ve İstemci Gizli Anahtarı'nı sağlayıcı yapılandırmasına ekleyin:
- Microsoft OAuth istemcisi kaydetmek için Hızlı başlangıç kılavuzu: Azure Active Directory v2.0 uç noktasına uygulama kaydetme başlıklı makaledeki talimatları uygulayın. Bu uç noktanın, Azure Active Directory hesaplarının yanı sıra Microsoft kişisel hesapları da kullanarak oturum açmayı desteklediğini unutmayın. Azure Active Directory 2.0 sürümü hakkında daha fazla bilgi edinin.
- Bu sağlayıcılara uygulama kaydederken projenizin
*.firebaseapp.com
alanını uygulamanızın yönlendirme alanı olarak kaydettiğinizden emin olun.
- Kaydet'i tıklayın.
Oturum açma akışını Firebase SDK'sı ile yönetme
Oturum açma akışını Firebase Apple platformlar SDK'sı ile yönetmek için aşağıdaki adımları uygulayın:
Xcode projenize özel URL şemaları ekleyin:
- Proje yapılandırmanızı açın: Sol 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çin ve 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ının iOS uygulamanızın bölümünde bulabilirsiniz. Diğer alanları boş bırakın.
Tamamlandığında yapılandırmanız aşağıdakine benzer bir görünümde olacaktır (ancak uygulamaya özel değerlerinizle):
microsoft.com sağlayıcı kimliğini kullanarak bir OAuthProvider örneği oluşturun.
Swift
var provider = OAuthProvider(providerID: "microsoft.com")
Objective-C
FIROAuthProvider *provider = [FIROAuthProvider providerWithProviderID:@"microsoft.com"];
İsteğe bağlı: OAuth isteğiyle birlikte göndermek istediğiniz ek özel OAuth parametrelerini belirtin.
Swift
provider.customParameters = [ "prompt": "consent", "login_hint": "user@firstadd.onmicrosoft.com" ]
Objective-C
[provider setCustomParameters:@{@"prompt": @"consent", @"login_hint": @"user@firstadd.onmicrosoft.com"}];
Microsoft'un desteklediği parametreler için Microsoft OAuth dokümanlarına bakın. Firebase için gerekli parametreleri
setCustomParameters
ile iletemeyeceğinizi unutmayın. Bu parametreler client_id, response_type, redirect_uri, state, scope ve response_mode parametreleridir.Yalnızca belirli bir Azure AD kiracısındaki kullanıcıların uygulamada oturum açmasına izin vermek için Azure AD kiracısının kolay alan adı veya kiracının GUID tanımlayıcısı kullanılabilir. Bu işlem, özel parametreler nesnesinde "kiracı" alanını belirterek yapılabilir.
Swift
provider.customParameters = [ // Optional "tenant" parameter in case you are using an Azure AD // tenant. eg. '8eaef023-2b34-4da1-9baa-8bc8c9d6a490' or // 'contoso.onmicrosoft.com' or "common" for tenant-independent // tokens. The default value is "common". "tenant": "TENANT_ID" ]
Objective-C
// Optional "tenant" parameter in case you are using an Azure AD tenant. // eg. '8eaef023-2b34-4da1-9baa-8bc8c9d6a490' or // 'contoso.onmicrosoft.com' or "common" for tenant-independent tokens. // The default value is "common". provider.customParameters = @{@"tenant": @"TENANT_ID"};
İsteğe bağlı: Kimlik doğrulama sağlayıcısından istemek istediğiniz temel profilin ötesinde ek OAuth 2.0 kapsamları belirtin.
Swift
provider.scopes = ["mail.read", "calendars.read"]
Objective-C
[provider setScopes:@[@"mail.read", @"calendars.read"]];
Daha fazla bilgi edinmek için Microsoft izinleri ve izin belgelerini inceleyin.
İsteğe bağlı: Uygulamanızın, kullanıcılara reCAPTCHA'yı gösterirken
SFSafariViewController
veyaUIWebView
sunma şeklini özelleştirmek istiyorsanızAuthUIDelegate
protokolüne uygun bir özel sınıf oluşturun ve bunucredentialWithUIDelegate
hizmetine iletin.OAuth sağlayıcı nesnesini kullanarak Firebase ile kimlik doğrulayın.
Swift
// Replace nil with the custom class that conforms to AuthUIDelegate // you created in last step to use a customized web view. 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
[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 }]; } }];
OAuth erişim jetonunu kullanarak Microsoft Graph API'yi çağırabilirsiniz.
Örneğin, temel profil bilgilerini almak için
Authorization
başlığındaki erişim jetonunu ileterek REST API'yi çağırabilirsiniz:https://graph.microsoft.com/v1.0/me
Firebase Auth tarafından desteklenen diğer sağlayıcıların aksine Microsoft, fotoğraf URL'si sağlamaz. Bunun yerine, bir profil fotoğrafının ikili verilerinin Microsoft Graph API aracılığıyla istenmesi gerekir.
OAuth erişim jetonuna ek olarak, kullanıcının OAuth kimlik jetonu da
OAuthCredential
nesnesinden alınabilir. Kimlik jetonundakisub
talebi uygulamaya özeldir ve Firebase Auth tarafından kullanılan veuser.providerData[0].uid
üzerinden erişilebilen birleşik kullanıcı tanımlayıcısıyla eşleşmez. Bunun yerineoid
hak talebi alanı kullanılmalıdır. Oturum açmak için Azure AD kiracısı kullanılırkenoid
talebi tam eşleşme olur. Ancak kiracı olmayan destek kaydı içinoid
alanı doldurulur. Birleşik kimlik4b2eabcdefghijkl
içinoid
,00000000-0000-0000-4b2e-abcdefghijkl
biçiminde olur.Yukarıdaki örneklerde oturum açma akışlarına odaklanılsa da siz de
linkWithCredential
kullanarak Microsoft sağlayıcısını mevcut bir kullanıcıya bağlayabilirsiniz. Örneğin, aynı kullanıcıya birden fazla sağlayıcı bağlayabilir ve bu sağlayıcılardan herhangi biriyle oturum açabilir.Swift
Auth().currentUser.link(withCredential: credential) { authResult, error in if error != nil { // Handle error. } // Microsoft 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. } // Microsoft 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, yakın zamanda giriş yapılmasını gerektiren hassas işlemler için yeni kimlik bilgilerini almak amacıyla
reauthenticateWithCredential
ile 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 }];
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ı bilgisi) bağlanır. Bu yeni hesap Firebase projenizin bir parçası olarak depolanır ve kullanıcının nasıl oturum açtığından bağımsız olarak projenizdeki her uygulamada kullanıcıyı tanımlamak için kullanılabilir.
-
Uygulamalarınızda kullanıcının temel profil bilgilerini
User
nesnesinden alabilirsiniz. Kullanıcıları Yönetme başlıklı makaleye göz atın. Firebase Realtime Database ve Cloud Storage Güvenlik Kurallarınızda, oturum açan kullanıcının benzersiz kullanıcı kimliğini
auth
değişkeninden alabilir ve kullanıcının hangi verilere erişebileceğini kontrol etmek için kullanabilirsiniz.
Kimlik doğrulama sağlayıcı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlayarak kullanıcıların, birden fazla kimlik doğrulama sağlayıcı kullanarak uygulamanızda oturum açmasına izin verebilirsiniz.
Bir kullanıcının oturumunu kapatmak için
signOut:
numaralı telefonu arayı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; }
Kimlik doğrulama hatalarının tamamı için hata işleme kodu eklemek de isteyebilirsiniz. Hataları İşleme bölümüne bakın.