אפשר להשתמש ב-API ל-REST של Google Cloud Identity Platform כדי ניהול פרוגרמטי של ספק הזהויות ב-OAuth (IdP) של פרויקט Firebase הגדרה אישית. באמצעות ה-API הזה אפשר להגדיר את ספקי הזהויות הרצויים לתמיכה, לעדכון, להפעלה ולהשבתה של פרוטוקול OAuth הנוכחי של הפרויקט הגדרות אישיות.
לקבלת הרשאה
כדי לקרוא ל-API ל-REST, צריך אסימון גישה מסוג OAuth 2.0 שמעניק גישת עריכה בפרויקט Firebase. לדוגמה, כדי לקבל אסימון גישה באמצעות חשבון שירות ב-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
כדי להוסיף הגדרה חדשה של ספק זהויות (IdP) ב-OAuth, צריך לפרסם את ההגדרה החדשה
את התצורה של projects.defaultSupportedIdpConfigs
נקודת הקצה.
צריך לציין את המזהה של ספק הזהויות ואת מזהה הלקוח סוד לקוח, שאותו מקבלים בדרך כלל מאתר המפתחים של הספק. אלה ספקי הזהויות שנתמכים ב-Firebase והמזהים שלהם:
ספק | מזהה IdP |
---|---|
Apple | apple.com |
מרכז המשחקים של Apple | gc.apple.com |
facebook.com |
|
GitHub | github.com |
google.com |
|
Google Play Games | playgames.google.com |
linkedin.com |
|
Microsoft | microsoft.com |
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 או לעדכן את הלקוח של הפרויקט
קודם כל, לקבל את ההגדרות הנוכחיות של הספק על ידי יצירת GET
בקשה לנקודת הקצה (endpoint) projects.defaultSupportedIdpConfigs
.
לאחר מכן, מבצעים את השינויים הרצויים בהגדרות ומבצעים תיקון (PATCH) של ההגדרות החדשות בנקודת הקצה projects.defaultSupportedIdpConfigs
.
לדוגמה, שימוש ב-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. במקום זאת, צריך להגדיר ספק זהויות חדש, כפי שמתואר בקטע הקודם.