Firebase Authentication with Identity Platform'a yükselttiyseniz, seçtiğiniz OpenID Connect (OIDC) uyumlu sağlayıcıyı kullanarak Firebase ile kullanıcılarınızın kimliğini doğrulayabilirsiniz. Bu, Firebase tarafından yerel olarak desteklenmeyen kimlik sağlayıcıların kullanılmasını mümkün kılar.
Sen başlamadan önce
Bir OIDC sağlayıcı kullanarak kullanıcıların oturumunu 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 dize. Sağlayıcınız, desteklediğiniz her platform için size farklı bir müşteri kimliği atayabilir. Bu, sağlayıcınız tarafından verilen kimlik belirteçlerindeki
aud
talebinin değerlerinden biridir.İstemci sırrı : Sağlayıcının bir müşteri kimliğinin sahipliğini doğrulamak için kullandığı gizli bir dize. Her müşteri kimliği için eşleşen bir müşteri sırrına ihtiyacınız olacak. (Bu değer yalnızca kimlik doğrulama kodu akışını kullanıyorsanız gereklidir ve bu kesinlikle önerilir.)
Veren : Sağlayıcınızı tanımlayan bir dize. Bu değer,
/.well-known/openid-configuration
ile eklendiğinde sağlayıcının OIDC keşif belgesinin konumu olan bir URL olmalıdır. Örneğin, verenhttps://auth.example.com
ise keşif belgesihttps://auth.example.com/.well-known/openid-configuration
mevcut olmalıdır.
Yukarıdaki bilgilere sahip olduktan sonra Firebase projeniz için oturum açma sağlayıcısı olarak OpenID Connect'i etkinleştirin:
Firebase Authentication with Identity Platform'a yükseltmediyseniz yükseltme yapın. OpenID Connect kimlik doğrulaması yalnızca yükseltilmiş projelerde mevcuttur.
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 örtülü 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ğine dikkat edin:
oidc.example-provider
gibi bir şey. Uygulamanıza oturum açma kodu eklediğinizde bu kimliğe ihtiyacınız olacak.İstemci kimliğinizi ve istemci sırrı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.
Değişikliklerinizi kaydedin.
Oturum açma akışını Firebase SDK ile yönetin
Bir Android uygulaması oluşturuyorsanız, OIDC sağlayıcınızı kullanarak Firebase ile kullanıcılarınızın kimliğini doğrulamanın en kolay yolu, tüm oturum açma akışını Firebase Android SDK ile gerçekleştirmektir.
Firebase Android SDK ile oturum açma akışını yönetmek için şu adımları izleyin:
Oluşturucusunu sağlayıcının kimliğiyle kullanarak bir OAuthProvider örneği oluşturun
Kotlin+KTX
val providerBuilder = OAuthProvider.newBuilder("oidc.example-provider")
Java
OAuthProvider.Builder providerBuilder = OAuthProvider.newBuilder("oidc.example-provider");
İsteğe bağlı : OAuth isteğiyle birlikte göndermek istediğiniz ek özel OAuth parametrelerini belirtin.
Kotlin+KTX
// Target specific email with login hint. providerBuilder.addCustomParameter("login_hint", "user@example.com")
Java
// Target specific email with login hint. providerBuilder.addCustomParameter("login_hint", "user@example.com");
Destekledikleri parametreler için OIDC sağlayıcınıza danışın. Firebase için gerekli parametreleri
setCustomParameters()
ile iletemeyeceğinizi unutmayın. Bu parametreler şunlardır: client_id , yanıt_türü , yönlendirme_uri , durum , kapsam ve yanıt_modu .İsteğe bağlı : Kimlik doğrulama sağlayıcısından talep etmek istediğiniz temel profilin ötesinde ek OAuth 2.0 kapsamları belirtin.
Kotlin+KTX
// Request read access to a user's email addresses. // This must be preconfigured in the app's API permissions. providerBuilder.scopes = listOf("mail.read", "calendars.read")
Java
// Request read access to a user's email addresses. // This must be preconfigured in the app's API permissions. List<String> scopes = new ArrayList<String>() { { add("mail.read"); add("calendars.read"); } }; providerBuilder.setScopes(scopes);
Kullandıkları kapsamlar için OIDC sağlayıcınıza danışın.
OAuth sağlayıcı nesnesini kullanarak Firebase ile kimlik doğrulaması yapın. Diğer FirebaseAuth işlemlerinden farklı olarak, bunun bir Özel Chrome Sekmesi açarak kullanıcı arayüzünüzün kontrolünü ele geçireceğini unutmayın. Sonuç olarak,
OnSuccessListener
veOnFailureListener
Activity'nize başvurmayın, çünkü işlem kullanıcı arayüzünü başlattığında bunlar hemen ayrılacaktır.Önce bir yanıt alıp almadığınızı kontrol etmelisiniz. Bu yöntemle oturum açmak, Aktivitenizi arka planda tutar, bu da oturum açma akışı sırasında sistem tarafından geri alınabileceği anlamına gelir. Böyle bir durumda kullanıcıyı tekrar denemeye zorlamadığınızdan emin olmak için, halihazırda bir sonuç olup olmadığını kontrol etmelisiniz.
Bekleyen bir sonuç olup olmadığını kontrol etmek için
getPendingAuthResult
arayın:Kotlin+KTX
val pendingResultTask = firebaseAuth.pendingAuthResult if (pendingResultTask != null) { // There's something already here! Finish the sign-in for your user. pendingResultTask .addOnSuccessListener { // User is signed in. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // ((OAuthCredential)authResult.getCredential()).getAccessToken(). // The OAuth secret can be retrieved by calling: // ((OAuthCredential)authResult.getCredential()).getSecret(). } .addOnFailureListener { // Handle failure. } } else { // There's no pending result so you need to start the sign-in flow. // See below. }
Java
Task<AuthResult> pendingResultTask = firebaseAuth.getPendingAuthResult(); if (pendingResultTask != null) { // There's something already here! Finish the sign-in for your user. pendingResultTask .addOnSuccessListener( new OnSuccessListener<AuthResult>() { @Override public void onSuccess(AuthResult authResult) { // User is signed in. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // ((OAuthCredential)authResult.getCredential()).getAccessToken(). // The OAuth secret can be retrieved by calling: // ((OAuthCredential)authResult.getCredential()).getSecret(). } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Handle failure. } }); } else { // There's no pending result so you need to start the sign-in flow. // See below. }
Oturum açma akışını başlatmak için
startActivityForSignInWithProvider
:Kotlin+KTX
firebaseAuth .startActivityForSignInWithProvider(activity, provider.build()) .addOnSuccessListener { // User is signed in. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // ((OAuthCredential)authResult.getCredential()).getAccessToken(). // The OAuth secret can be retrieved by calling: // ((OAuthCredential)authResult.getCredential()).getSecret(). } .addOnFailureListener { // Handle failure. }
Java
firebaseAuth .startActivityForSignInWithProvider(/* activity= */ this, provider.build()) .addOnSuccessListener( new OnSuccessListener<AuthResult>() { @Override public void onSuccess(AuthResult authResult) { // User is signed in. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // ((OAuthCredential)authResult.getCredential()).getAccessToken(). // The OAuth secret can be retrieved by calling: // ((OAuthCredential)authResult.getCredential()).getSecret(). } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Handle failure. } });
Yukarıdaki örnekler oturum açma akışlarına odaklansa da, startActivityForLinkWithProvider kullanarak bir OIDC sağlayıcısını mevcut bir kullanıcıya bağlama olanağına da
startActivityForLinkWithProvider
. Örneğin, birden çok sağlayıcıyı aynı kullanıcıya bağlayarak onların herhangi biriyle oturum açmasını sağlayabilirsiniz.Kotlin+KTX
// The user is already signed-in. val firebaseUser = firebaseAuth.currentUser!! firebaseUser .startActivityForLinkWithProvider(activity, provider.build()) .addOnSuccessListener { // Provider credential is linked to the current user. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // authResult.getCredential().getAccessToken(). // The OAuth secret can be retrieved by calling: // authResult.getCredential().getSecret(). } .addOnFailureListener { // Handle failure. }
Java
// The user is already signed-in. FirebaseUser firebaseUser = firebaseAuth.getCurrentUser(); firebaseUser .startActivityForLinkWithProvider(/* activity= */ this, provider.build()) .addOnSuccessListener( new OnSuccessListener<AuthResult>() { @Override public void onSuccess(AuthResult authResult) { // Provider credential is linked to the current user. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // authResult.getCredential().getAccessToken(). // The OAuth secret can be retrieved by calling: // authResult.getCredential().getSecret(). } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Handle failure. } });
Aynı model, yakın zamanda oturum açmayı gerektiren hassas işlemler için yeni kimlik bilgileri almak üzere kullanılabilen
startActivityForReauthenticateWithProvider
ile kullanılabilir.Kotlin+KTX
// The user is already signed-in. val firebaseUser = firebaseAuth.currentUser!! firebaseUser .startActivityForReauthenticateWithProvider(activity, provider.build()) .addOnSuccessListener { // User is re-authenticated with fresh tokens and // should be able to perform sensitive operations // like account deletion and email or password // update. } .addOnFailureListener { // Handle failure. }
Java
// The user is already signed-in. FirebaseUser firebaseUser = firebaseAuth.getCurrentUser(); firebaseUser .startActivityForReauthenticateWithProvider(/* activity= */ this, provider.build()) .addOnSuccessListener( new OnSuccessListener<AuthResult>() { @Override public void onSuccess(AuthResult authResult) { // User is re-authenticated with fresh tokens and // should be able to perform sensitive operations // like account deletion and email or password // update. } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Handle failure. } });
Oturum açma akışını manuel olarak yönetin
Uygulamanızda OpenID Connect oturum açma akışını zaten uyguladıysanız, Firebase ile kimlik doğrulaması yapmak için doğrudan kimlik belirtecini kullanabilirsiniz:
Kotlin+KTX
val providerId = "oidc.example-provider" // As registered in Firebase console. val credential = oAuthCredential(providerId) { setIdToken(idToken) // ID token from OpenID Connect flow. } Firebase.auth .signInWithCredential(credential) .addOnSuccessListener { authResult -> // User is signed in. // IdP data available in: // authResult.additionalUserInfo.profile } .addOnFailureListener { e -> // Handle failure. }
Java
AuthCredential credential = OAuthProvider .newCredentialBuilder("oidc.example-provider") // As registered in Firebase console. .setIdToken(idToken) // ID token from OpenID Connect flow. .build(); FirebaseAuth.getInstance() .signInWithCredential(credential) .addOnSuccessListener(new OnSuccessListener<AuthResult>() { @Override public void onSuccess(AuthResult authResult) { // User is signed in. // IdP data available in: // authResult.getAdditionalUserInfo().getProfile() } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Handle failure. } });
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 (yani, kullanıcı adı ve parolası, telefon numarası veya kimlik doğrulama sağlayıcı bilgileri) bağlanır. Bu yeni hesap, Firebase projenizin bir parçası olarak saklanır ve kullanıcının nasıl oturum açtığına bakılmaksızın projenizdeki her uygulamada bir kullanıcıyı tanımlamak için kullanılabilir.
Uygulamalarınızda, kullanıcının temel profil bilgilerini
FirebaseUser
nesnesinden alabilirsiniz. Bkz. Kullanıcıları Yönetin .Firebase Gerçek Zamanlı Veritabanı ve Bulut Depolama Güvenlik Kurallarınızda , oturum açmış kullanıcının benzersiz kullanıcı kimliğini
auth
değişkeninden alabilir ve bunu, bir kullanıcının hangi verilere erişebileceğini kontrol etmek için kullanabilirsiniz.
Bir kullanıcının oturumunu kapatmak için signOut
arayın:
Kotlin+KTX
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();