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.
Firebase JavaScript SDK ile oturum açma akışını işlemek için aşağıdaki adımları uygulayın:
Firebase konsolunda aldığınız sağlayıcı kimliğini kullanarak bir
OAuthProviderörneği oluşturun.Web
import { OAuthProvider } from "firebase/auth"; const provider = new OAuthProvider('oidc.example-provider');Web
var provider = new firebase.auth.OAuthProvider('oidc.example-provider');İsteğe bağlı: OAuth isteğiyle göndermek istediğiniz ek özel OAuth parametrelerini belirtin.
Web
provider.setCustomParameters({ // Target specific email with login hint. login_hint: 'user@example.com' });Web
provider.setCustomParameters({ // Target specific email with login hint. 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.
Web
provider.addScope('mail.read'); provider.addScope('calendars.read');Web
provider.addScope('mail.read'); provider.addScope('calendars.read');Desteklenen kapsamlar için sağlayıcınıza danışın.
OAuth sağlayıcı nesnesini kullanarak Firebase ile kimlik doğrulayın.
Kullanıcıyı sağlayıcının oturum açma sayfasına yönlendirebilir veya oturum açma sayfasını pop-up tarayıcı penceresinde açabilirsiniz.
Yönlendirme akışı
signInWithRedirect()numarasını arayarak sağlayıcının oturum açma sayfasına yönlendirin:Web
import { getAuth, signInWithRedirect } from "firebase/auth"; const auth = getAuth(); signInWithRedirect(auth, provider);Web
firebase.auth().signInWithRedirect(provider);Kullanıcı oturum açma işlemini tamamlayıp uygulamanıza döndükten sonra
getRedirectResult()işlevini çağırarak oturum açma sonucunu alabilirsiniz.Web
import { getAuth, getRedirectResult, OAuthProvider } from "firebase/auth"; const auth = getAuth(); getRedirectResult(auth) .then((result) => { // User is signed in. // IdP data available in result.additionalUserInfo.profile. // Get the OAuth access token and ID Token const credential = OAuthProvider.credentialFromResult(result); const accessToken = credential.accessToken; const idToken = credential.idToken; }) .catch((error) => { // Handle error. });Web
firebase.auth().getRedirectResult() .then((result) => { // IdP data available in result.additionalUserInfo.profile. // ... /** @type {firebase.auth.OAuthCredential} */ var credential = result.credential; // OAuth access and id tokens can also be retrieved: var accessToken = credential.accessToken; var idToken = credential.idToken; }) .catch((error) => { // Handle error. });Pop-up akışı
Web
import { getAuth, signInWithPopup, OAuthProvider } from "firebase/auth"; const auth = getAuth(); signInWithPopup(auth, provider) .then((result) => { // User is signed in. // IdP data available using getAdditionalUserInfo(result) // Get the OAuth access token and ID Token const credential = OAuthProvider.credentialFromResult(result); const accessToken = credential.accessToken; const idToken = credential.idToken; }) .catch((error) => { // Handle error. });Web
firebase.auth().signInWithPopup(provider) .then((result) => { // IdP data available in result.additionalUserInfo.profile. // ... /** @type {firebase.auth.OAuthCredential} */ var credential = result.credential; // OAuth access and id tokens can also be retrieved: var accessToken = credential.accessToken; var idToken = credential.idToken; }) .catch((error) => { // Handle error. });Yukarıdaki örnekler oturum açma akışlarına odaklanırken
linkWithRedirect()velinkWithPopup()kullanarak bir OIDC sağlayıcısını mevcut bir kullanıcıya bağlamak vereauthenticateWithRedirect()ilereauthenticateWithPopup()kullanarak bir kullanıcının kimliğini yeniden doğrulamak için aynı kalıbı kullanabilirsiniz. Bu kalıp, son oturum açma işlemi gerektiren hassas işlemler için yeni kimlik bilgilerini almak üzere kullanılabilir.
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:
Web
import { getAuth, signInWithCredential, OAuthProvider } from "firebase/auth";
const provider = new OAuthProvider("oidc.example-provider");
const credential = provider.credential({
idToken: idToken,
});
signInWithCredential(getAuth(), credential)
.then((result) => {
// User is signed in.
// IdP data available in result.additionalUserInfo.profile.
// Get the OAuth access token and ID Token
const credential = OAuthProvider.credentialFromResult(result);
const accessToken = credential.accessToken;
const idToken = credential.idToken;
})
.catch((error) => {
// Handle error.
});
Web
const provider = new OAuthProvider("oidc.example-provider");
const credential = provider.credential({
idToken: idToken,
});
firebase.auth().signInWithCredential(credential)
.then((result) => {
// User is signed in.
// IdP data available in result.additionalUserInfo.profile.
// Get the OAuth access token and ID Token
const credential = OAuthProvider.credentialFromResult(result);
const accessToken = credential.accessToken;
const idToken = credential.idToken;
})
.catch((error) => {
// Handle error.
});