Anda dapat menggunakan Google Cloud Identity Platform REST API untuk mengelola konfigurasi penyedia identitas OAuth (IdP) project Firebase secara terprogram. Dengan API ini, Anda dapat mengonfigurasi penyedia identitas yang ingin Anda dukung, serta memperbarui, mengaktifkan, dan menonaktifkan konfigurasi OAuth project Anda saat ini.
Mendapatkan otorisasi
Sebelum dapat memanggil REST API, Anda memerlukan token akses OAuth 2.0 yang memberikan akses Editor ke project Firebase Anda. Misalnya, untuk mendapatkan token akses menggunakan akun layanan di 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);
}
Menambahkan konfigurasi penyedia identitas OAuth baru
Untuk menambahkan konfigurasi penyedia identitas (IdP) OAuth baru, POSTING konfigurasi
baru ke endpoint
projects.defaultSupportedIdpConfigs
.
Anda harus menentukan ID penyedia identitas dan ID klien serta rahasia klien, yang biasanya Anda dapatkan dari situs developer penyedia. Berikut adalah penyedia identitas yang didukung oleh Firebase dan ID-nya:
Penyedia | IdP ID |
---|---|
Apple | apple.com |
Apple Game Center | gc.apple.com |
facebook.com |
|
GitHub | github.com |
google.com |
|
Google Play Game | playgames.google.com |
linkedin.com |
|
Microsoft | microsoft.com |
twitter.com |
|
Yahoo | yahoo.com |
Misalnya, menggunakan 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);
Jika berhasil, panggilan akan menampilkan konfigurasi yang baru dibuat. Contoh:
{
name: 'projects/your-numerical-project-id/defaultSupportedIdpConfigs/facebook.com',
enabled: true,
clientId: 'your-facebook-client-id',
clientSecret: 'your-facebook-client-secret'
}
Jika Anda mencoba mengonfigurasi penyedia identitas yang telah dikonfigurasi untuk project Anda, panggilan akan menampilkan error HTTP 409. Dalam situasi ini, Anda dapat memperbarui konfigurasi, seperti yang dijelaskan di bawah.
Mengupdate konfigurasi penyedia identitas OAuth
Untuk mengaktifkan atau menonaktifkan penyedia identitas OAuth, atau mengupdate konfigurasi klien
project Anda, terlebih dahulu dapatkan konfigurasi saat ini dari penyedia dengan membuat permintaan
GET ke endpoint projects.defaultSupportedIdpConfigs
.
Kemudian, buat perubahan yang Anda inginkan pada konfigurasi dan lakuan patch konfigurasi
baru ke endpoint
projects.defaultSupportedIdpConfigs
.
Misalnya, menggunakan 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);
Jika Anda mencoba memperbarui konfigurasi penyedia identitas yang belum pernah dikonfigurasi untuk project Anda, panggilan akan menampilkan error HTTP 404. Sebaliknya, konfigurasikan penyedia identitas baru seperti yang ditampilkan di bagian sebelumnya.