Configurer des fournisseurs d'identité OAuth par programmation pour Firebase Authentication

Vous pouvez utiliser l'API REST Google Cloud Identity Platform pour : gérer de manière automatisée le fournisseur d'identité (IdP) OAuth d'un projet Firebase configuration. Cette API vous permet de configurer les fournisseurs d'identité pour prendre en charge, mettre à jour, activer et désactiver le protocole OAuth actuel de votre projet, de configuration.

Obtenir l'autorisation

Avant de pouvoir appeler l'API REST, vous avez besoin d'un jeton d'accès OAuth 2.0 qui accorde Accès éditeur à votre projet Firebase. Par exemple, pour obtenir un jeton d'accès à l'aide d'un compte de service dans 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);
}

Ajouter une configuration de fournisseur d'identité OAuth

Pour ajouter une configuration de fournisseur d'identité (IdP) OAuth, envoyez le nouveau configuration sur projects.defaultSupportedIdpConfigs point de terminaison unique.

Vous devez spécifier l'ID du fournisseur d'identité et votre ID client. le code secret du client, que vous obtenez généralement sur le site pour les développeurs du fournisseur. Ici, sont les fournisseurs d'identité compatibles avec Firebase et leurs identifiants:

Fournisseur ID du fournisseur d'identité
Apple apple.com
Apple Game Center gc.apple.com
Facebook facebook.com
GitHub github.com
Google google.com
Google Play Jeux playgames.google.com
LinkedIn linkedin.com
Microsoft microsoft.com
Twitter twitter.com
Yahoo yahoo.com

Par exemple, en utilisant 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);

Si l'appel aboutit, il renvoie la configuration que vous venez de créer. Exemple :

{
  name: 'projects/your-numerical-project-id/defaultSupportedIdpConfigs/facebook.com',
  enabled: true,
  clientId: 'your-facebook-client-id',
  clientSecret: 'your-facebook-client-secret'
}

Si vous essayez de configurer un fournisseur d'identité déjà configuré pour votre projet, l'appel renvoie l'erreur HTTP 409. Dans ce cas, vous pouvez mettez à jour la configuration, comme décrit ci-dessous.

Mettre à jour la configuration d'un fournisseur d'identité OAuth

Activer ou désactiver un fournisseur d'identité OAuth, ou mettre à jour le client de votre projet la configuration actuelle, commencez par obtenir la configuration actuelle du fournisseur en effectuant une requête au point de terminaison projects.defaultSupportedIdpConfigs. Apportez ensuite les modifications souhaitées à la configuration et appuyez sur PATCH pour configuration sur projects.defaultSupportedIdpConfigs point de terminaison unique.

Par exemple, en utilisant 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);

Si vous essayez de mettre à jour la configuration d'un fournisseur d'identité que vous n'avez jamais configuré pour votre projet, les appels renvoient une erreur HTTP 404. À la place, configurer un nouveau fournisseur d'identité, comme indiqué dans la section .