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
aud
w 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-configuration
będzie to lokalizacja dokumentu wykrywania OIDC dostawcy. Jeśli na przykład wystawcą jesthttps://auth.example.com
, dokument opisujący musi być dostępny nahttps://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
setCustomParameters
Te parametry to:client_id
,response_type
,redirect_uri
,state
,scope
iresponse_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()
ilinkWithPopup()
, a następnie ponownie uwierzytelnij użytkownika przy użyciureauthenticateWithRedirect()
ireauthenticateWithPopup()
, 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.
});