Mit der Google Cloud Identity Platform REST API können Sie OAuth-Identitätsanbieter (IdP) eines Firebase-Projekts programmatisch verwalten Konfiguration. Mit dieser API können Sie die gewünschten Identitätsanbieter konfigurieren um das aktuelle OAuth Ihres Projekts zu unterstützen und zu aktualisieren, zu aktivieren und zu deaktivieren Konfigurationen.
Autorisierung abrufen
Bevor Sie die REST API aufrufen können, benötigen Sie ein OAuth 2.0-Zugriffstoken Bearbeiterzugriff auf Ihr Firebase-Projekt. Um beispielsweise ein Zugriffstoken zu erhalten, mithilfe eines Dienstkontos in Node.js:
const googleAuth = require('google-auth-library');
const SCOPES = ['https://www.googleapis.com/auth/cloud-platform'];
async function getAccessToken() {
const serviceAccount = require('/path/to/service_account_key.json');
const jwtClient = new googleAuth.JWT(
serviceAccount.client_email,
null,
serviceAccount.private_key,
SCOPES,
null
);
return jwtClient.authorize().then((tokens) => tokens.access_token);
}
Neue Konfiguration des OAuth-Identitätsanbieters hinzufügen
Wenn Sie eine neue OAuth-IdP-Konfiguration (Identity Provider) hinzufügen möchten, senden Sie die neue Konfiguration per POST an den Endpunkt projects.defaultSupportedIdpConfigs
.
Sie müssen die ID des Identitätsanbieters und Ihre Client-ID angeben. Clientschlüssel, den Sie in der Regel von der Entwicklerwebsite des Anbieters erhalten. Hier sind die von Firebase unterstützten Identitätsanbieter und ihre IDs:
Anbieter | IdP-ID |
---|---|
Apple | apple.com |
Apple Game Center | gc.apple.com |
facebook.com |
|
GitHub | github.com |
google.com |
|
Google Play Spiele | playgames.google.com |
linkedin.com |
|
Microsoft | microsoft.com |
twitter.com |
|
Yahoo | yahoo.com |
Beispiel mit Node.js:
const fetch = require('node-fetch');
const GCIP_API_BASE = 'https://identitytoolkit.googleapis.com/v2';
async function addIdpConfig(projectId, accessToken, idpId, clientId, clientSecret) {
const uri = `${GCIP_API_BASE}/projects/${projectId}/defaultSupportedIdpConfigs?idpId=${idpId}`;
const options = {
method: 'POST',
headers: {
'Authorization': `Bearer ${accessToken}`
},
body: JSON.stringify({
name: `projects/${projectId}/defaultSupportedIdpConfigs/${idpId}`,
enabled: true,
clientId: clientId,
clientSecret: clientSecret,
}),
};
return fetch(uri, options).then((response) => {
if (response.ok) {
return response.json();
} else if (response.status == 409) {
throw new Error('IdP configuration already exists. Update it instead.');
} else {
throw new Error('Server error.');
}
});
}
(async () => {
const projectId = 'your-firebase-project-id';
const accessToken = await getAccessToken();
const idpId = 'facebook.com';
const clientId = 'your-facebook-client-id';
const clientSecret = 'your-facebook-client-secret';
try {
await addIdpConfig(projectId, accessToken, idpId, clientId, clientSecret);
} catch (err) {
console.error(err.message);
}
})().catch(console.error);
Wenn der Aufruf erfolgreich ist, wird die neu erstellte Konfiguration zurückgegeben. Beispiel:
{
name: 'projects/your-numerical-project-id/defaultSupportedIdpConfigs/facebook.com',
enabled: true,
clientId: 'your-facebook-client-id',
clientSecret: 'your-facebook-client-secret'
}
Wenn Sie versuchen, einen bereits konfigurierten Identitätsanbieter zu konfigurieren für Ihr Projekt gibt der Aufruf den HTTP-Fehler 409 zurück. In dieser Situation können Sie aktualisieren Sie stattdessen die Konfiguration wie unten beschrieben.
Konfiguration eines OAuth-Identitätsanbieters aktualisieren
So aktivieren oder deaktivieren Sie einen OAuth-Identitätsanbieter oder aktualisieren den Client Ihres Projekts
rufen Sie zuerst die aktuelle Konfiguration des Anbieters ab, indem Sie eine GET-Anfrage
Anfrage an den Endpunkt projects.defaultSupportedIdpConfigs
.
Nehmen Sie dann die gewünschten Änderungen an der Konfiguration vor und wenden Sie die neue Konfiguration mit PATCH auf den Endpunkt projects.defaultSupportedIdpConfigs
an.
Verwenden Sie beispielsweise Node.js:
async function getIdpCfg(projectId, accessToken, idpId) {
const uri = `${GCIP_API_BASE}/projects/${projectId}/defaultSupportedIdpConfigs/${idpId}`;
const options = {
method: 'GET',
headers: {
'Authorization': `Bearer ${accessToken}`
},
};
return fetch(uri, options).then((response) => {
if (response.ok) {
return response.json();
} else if (response.status == 404) {
throw new Error('IdP configuration not found. First add the IdP'
+ ' configuration to your project.');
} else {
throw new Error('Server error.');
}
});
}
async function updateIdpConfig(accessToken, idpCfg) {
const uri = `${GCIP_API_BASE}/${idpCfg.name}`;
const options = {
method: 'PATCH',
headers: {
'Authorization': `Bearer ${accessToken}`
},
body: JSON.stringify(idpCfg),
};
return fetch(uri, options).then((response) => {
if (response.ok) {
return response.json();
} else if (response.status == 404) {
throw new Error('IdP configuration not found. First add the IdP'
+ ' configuration to your project.');
} else {
throw new Error('Server error.');
}
});
}
(async () => {
const projectId = 'your-firebase-project-id';
const accessToken = await getAccessToken();
const idpId = 'facebook.com';
try {
// Get the IdP's current configuration.
const idpCfg = await getIdpCfg(projectId, accessToken, idpId);
// Update the configuration. (For example, disable the IdP.)
idpCfg.enabled = false;
await updateIdpConfig(accessToken, idpCfg);
} catch (err) {
console.error(err.message);
}
})().catch(console.error);
Wenn Sie versuchen, die Konfiguration eines Identitätsanbieters zu aktualisieren, für Ihr Projekt konfiguriert haben, geben die Aufrufe den HTTP-Fehler 404 zurück. Konfigurieren Sie stattdessen einen neuen Identitätsanbieter, wie im vorherigen Abschnitt beschrieben.