Jeśli korzystasz z usługi Firebase Authentication with Identity Platform, możesz uwierzytelniać użytkowników przy użyciu Firebase za pomocą wybranego przez Ciebie dostawcy zgodnego z OpenID Connect (OIDC). Ten pozwala na korzystanie z dostawców tożsamości, które nie są natywnie obsługiwane przez Firebase.
Zanim zaczniesz
Aby zalogować użytkowników przy użyciu dostawcy OIDC, musisz najpierw zebrać pewne informacje od dostawcy:
- Identyfikator klienta: unikalny ciąg znaków identyfikujący aplikację. Twoje dostawca może przypisać Ci inny identyfikator klienta dla każdej obsługiwanej platformy. To jest jedna z wartości roszczenia - audw tokenach tożsamości wystawionych przez dostawcy usług.
- Tajny klucz klienta: tajny ciąg znaków używany przez dostawcę do potwierdzania własności. identyfikatora klienta. Do każdego identyfikatora klienta musi być dopasowany tajny klucz klienta. (Ta wartość jest wymagana tylko w przypadku przepływu kodu uwierzytelniającego, który jest zdecydowanie zalecane). 
- Wystawca: ciąg znaków identyfikujący dostawcę. Ta wartość musi być adresem URL że po dodaniu ciągu - /.well-known/openid-configurationbędzie to lokalizacja dokumentu wykrywania OIDC dostawcy. Jeśli na przykład wystawcą jest- https://auth.example.com, dokument opisujący musi być dostępny na- https://auth.example.com/.well-known/openid-configuration
Po uzyskaniu tych informacji włącz OpenID Connect, aby się zalogować. dla swojego projektu Firebase:
- Jeśli nie korzystasz jeszcze z wersji Firebase Authentication with Identity Platform, zrób to. Uwierzytelnianie OpenID Connect jest dostępne tylko w uaktualnionych projektach. 
- Na stronie Dostawcy logowania. w konsoli Firebase, kliknij Dodaj nowego dostawcę i wybierz OpenID Connect. 
- Wybierz, czy będziesz korzystać z przepływu kodu autoryzacji czy przepływ niejawny. - Należy zawsze używać przepływu kodu, jeśli dostawca go obsługuje. Przepływ niejawny jest mniej bezpieczny i zdecydowanie odradzamy jego używanie. 
- Nazwij tego dostawcę. Zanotuj wygenerowany identyfikator dostawcy: np. - oidc.example-provider. Ten identyfikator będzie potrzebny podczas dodawania kod logowania do aplikacji.
- Podaj swój identyfikator klienta i tajny klucz klienta oraz ciąg znaków wydawcy dostawcy. Te wartości muszą dokładnie odpowiadać wartościom przypisanym przez dostawcę. 
- Zapisz zmiany. 
Zarejestruj się za pomocą pakietu SDK Firebase
Najłatwiejszy sposób uwierzytelniania użytkowników w Firebase przy użyciu OIDC jest do obsługi całej procedury logowania za pomocą pakietu SDK Firebase.
Aby zalogować się za pomocą pakietu SDK Firebase JavaScript, postępuj zgodnie z tymi wskazówkami kroki:
- Utwórz instancję - OAuthProvider, używając otrzymanego identyfikatora dostawcy w konsoli Firebase.- Web- import { OAuthProvider } from "firebase/auth"; const provider = new OAuthProvider('oidc.example-provider');- Web- var provider = new firebase.auth.OAuthProvider('oidc.example-provider');
- Opcjonalnie: określ dodatkowe niestandardowe parametry OAuth, które chcesz stosować wysyłać z żądaniem OAuth. - 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' });- Skontaktuj się z dostawcą, aby poznać obsługiwane parametry. Pamiętaj, że parametrów wymaganych przez Firebase nie można przekazywać za pomocą funkcji - setCustomParametersTe parametry to:- client_id,- response_type,- redirect_uri,- state,- scopei- response_mode.
- Opcjonalnie: określ dodatkowe zakresy OAuth 2.0 poza podstawowym profilem, które których chcesz żądać od dostawcy uwierzytelniania. - Web- provider.addScope('mail.read'); provider.addScope('calendars.read');- Web- provider.addScope('mail.read'); provider.addScope('calendars.read');- Skontaktuj się z dostawcą, aby uzyskać informacje o obsługiwanych zakresach. 
- Uwierzytelniaj w Firebase za pomocą obiektu dostawcy OAuth. - Możesz przekierować użytkownika na stronę logowania dostawcy lub otworzyć stronie logowania w wyskakującym okienku przeglądarki. - Proces przekierowania - Przekieruj na stronę logowania dostawcy, dzwoniąc pod numer - signInWithRedirect():- Web- import { getAuth, signInWithRedirect } from "firebase/auth"; const auth = getAuth(); signInWithRedirect(auth, provider);- Web- firebase.auth().signInWithRedirect(provider);- Gdy użytkownik się zaloguje i wróci do aplikacji, możesz uzyskać wyniku logowania, dzwoniąc pod numer - getRedirectResult().- 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. });- Wyskakująca instrukcja - 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. });
- Powyższe przykłady dotyczą procesu logowania, ale możesz użyć tego samego do połączenia dostawcy OIDC z istniejącym użytkownikiem za pomocą - linkWithRedirect()i- linkWithPopup(), a następnie ponownie uwierzytelnij użytkownika przy użyciu- reauthenticateWithRedirect()i- reauthenticateWithPopup(), które mogą być służy do pobierania nowych danych logowania na potrzeby operacji poufnych, które wymagają ostatniego logowania.
Zarejestruj się ręcznie
Jeśli masz już wdrożony w aplikacji proces logowania OpenID Connect, mogą używać tokena identyfikatora bezpośrednio do uwierzytelniania w Firebase:
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.
    });