Firebase যাচাইকরণের জন্য প্রোগ্রাম্যাটিক উপায়ে OAuth পরিচয় প্রদানকারী কনফিগার করা

আপনি Google Cloud Identity Platform REST API ব্যবহার করে প্রোগ্রাম্যাটিক উপায়ে Firebase প্রোজেক্টের OAuth আইডেন্টিটি প্রদানকারী (IdP) কনফিগারেশন ম্যানেজ করতে পারবেন। এই API-এর সাহায্যে, আপনি যেসব পরিচয় প্রদানকারীকে সাপোর্ট করতে চান সেগুলি কনফিগার করতে এবং আপনার প্রজেক্টের বর্তমান OAuth কনফিগারেশন আপডেট, চালু ও বন্ধ করতে পারবেন।

অনুমোদন পাওয়া

REST API কল করার আগে, আপনার Firebase প্রোজেক্টে এডিটর অ্যাক্সেস দেয় এমন 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 এন্ডপয়েন্টে নতুন কনফিগারেশন POST করুন।

আপনাকে পরিচয় প্রদানকারীর আইডি এবং আপনার ক্লায়েন্ট আইডি ও ক্লায়েন্ট সিক্রেট উল্লেখ করতে হবে, যা আপনি সাধারণত প্রদানকারীর ডেভেলপার সাইট থেকে পান। Firebase যেসব পরিচয় প্রদানকারীকে সমর্থন করে এবং তাদের আইডি এখানে দেওয়া হল:

পরিষেবা প্রদানকারী IdP আইডি
Apple apple.com
Apple Game Center gc.apple.com
Facebook facebook.com
GitHub github.com
Google google.com
Google Play Games playgames.google.com
LinkedIn linkedin.com
Microsoft microsoft.com
Twitter twitter.com
Yahoo 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 error 404 রিটার্ন করবে। পরিবর্তে, আগের বিভাগে দেখানো নতুন পরিচয় প্রদানকারীকে কনফিগার করুন।