फायरबेस प्रमाणीकरण के लिए OAuth पहचान प्रदाताओं को प्रोग्रामेटिक रूप से कॉन्फ़िगर करें

आप फायरबेस प्रोजेक्ट के OAuth पहचान प्रदाता (आईडीपी) कॉन्फ़िगरेशन को प्रोग्रामेटिक रूप से प्रबंधित करने के लिए Google क्लाउड आइडेंटिटी प्लेटफ़ॉर्म REST API का उपयोग कर सकते हैं। इस एपीआई के साथ, आप उन पहचान प्रदाताओं को कॉन्फ़िगर कर सकते हैं जिनका आप समर्थन करना चाहते हैं, और अपने प्रोजेक्ट की वर्तमान OAuth कॉन्फ़िगरेशन को अपडेट, सक्षम और अक्षम कर सकते हैं।

प्राधिकरण प्राप्त करें

इससे पहले कि आप REST API को कॉल कर सकें, आपको एक OAuth 2.0 एक्सेस टोकन की आवश्यकता होगी जो संपादक को आपके फायरबेस प्रोजेक्ट तक पहुंच प्रदान करता है। उदाहरण के लिए, 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);
}

एक नया OAuth पहचान प्रदाता कॉन्फ़िगरेशन जोड़ें

एक नया OAuth पहचान प्रदाता (IdP) कॉन्फ़िगरेशन जोड़ने के लिए, नए कॉन्फ़िगरेशन को projects.defaultSupportedIdpConfigs एंडपॉइंट पर पोस्ट करें।

आपको पहचान प्रदाता की आईडी और अपनी क्लाइंट आईडी और क्लाइंट सीक्रेट निर्दिष्ट करने की आवश्यकता होगी, जो आपको आमतौर पर प्रदाता की डेवलपर साइट से मिलती है। यहां वे पहचान प्रदाता हैं जिनका फायरबेस समर्थन करता है और उनकी आईडी हैं:

प्रदाता आईडीपी आईडी
सेब apple.com
एप्पल गेम सेंटर gc.apple.com
फेसबुक facebook.com
GitHub github.com
गूगल google.com
गूगल प्ले गेम्स playgames.google.com
Linkedin linkedin.com
माइक्रोसॉफ्ट microsoft.com
ट्विटर twitter.com
याहू yahoo.com

उदाहरण के लिए, 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);

यदि कॉल सफल होती है, तो यह नव-निर्मित कॉन्फ़िगरेशन लौटाता है। उदाहरण के लिए:

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

यदि आप किसी पहचान प्रदाता को कॉन्फ़िगर करने का प्रयास करते हैं जो पहले से ही आपके प्रोजेक्ट के लिए कॉन्फ़िगर किया गया है, तो कॉल HTTP त्रुटि 409 लौटाता है। इस स्थिति में, आप इसके बजाय कॉन्फ़िगरेशन को अपडेट कर सकते हैं, जैसा कि नीचे बताया गया है।

OAuth पहचान प्रदाता कॉन्फ़िगरेशन अपडेट करें

OAuth पहचान प्रदाता को सक्षम या अक्षम करने के लिए, या अपने प्रोजेक्ट के क्लाइंट कॉन्फ़िगरेशन को अपडेट करने के लिए, पहले projects.defaultSupportedIdpConfigs एंडपॉइंट पर GET अनुरोध करके प्रदाता का वर्तमान कॉन्फ़िगरेशन प्राप्त करें। फिर, कॉन्फ़िगरेशन में अपने इच्छित परिवर्तन करें और नए कॉन्फ़िगरेशन को projects.defaultSupportedIdpConfigs एंडपॉइंट पर PATCH करें।

उदाहरण के लिए, 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);

यदि आप किसी ऐसे पहचान प्रदाता के कॉन्फ़िगरेशन को अपडेट करने का प्रयास करते हैं जिसे आपने अपने प्रोजेक्ट के लिए कभी कॉन्फ़िगर नहीं किया है, तो कॉल HTTP त्रुटि 404 लौटा देगी। इसके बजाय, एक नया पहचान प्रदाता कॉन्फ़िगर करें जैसा कि पिछले अनुभाग में दिखाया गया है।