Bạn có thể sử dụng API REST của Google Cloud Identity Platform để quản lý trình cung cấp danh tính OAuth (IdP) của dự án Firebase theo phương thức lập trình . Với API này, bạn có thể định cấu hình nhà cung cấp danh tính mà mình muốn để hỗ trợ và cập nhật, bật cũng như tắt OAuth hiện tại của dự án .
Yêu cầu uỷ quyền
Trước khi có thể gọi API REST, bạn cần có mã truy cập OAuth 2.0 để cấp Quyền truy cập của người chỉnh sửa đối với dự án Firebase của bạn. Ví dụ: để nhận mã truy cập sử dụng tài khoản dịch vụ trong 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);
}
Thêm cấu hình nhà cung cấp danh tính OAuth mới
Để thêm cấu hình nhà cung cấp danh tính (IdP) OAuth mới, hãy POST
thành projects.defaultSupportedIdpConfigs
điểm cuối.
Bạn sẽ cần chỉ định mã nhận dạng của nhà cung cấp danh tính cũng như mã ứng dụng khách và mật khẩu ứng dụng khách mà bạn thường lấy từ trang web của nhà phát triển. Ở đây là các nhà cung cấp danh tính mà Firebase hỗ trợ và mã nhận dạng của các nhà cung cấp này:
Nhà cung cấp | Mã nhận dạng nhà cung cấp danh tính (IdP) |
---|---|
Apple | apple.com |
Trung tâm trò chơi của 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 |
Ví dụ: sử dụng 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);
Nếu lệnh gọi thành công, lệnh gọi sẽ trả về cấu hình mới tạo. Ví dụ:
{
name: 'projects/your-numerical-project-id/defaultSupportedIdpConfigs/facebook.com',
enabled: true,
clientId: 'your-facebook-client-id',
clientSecret: 'your-facebook-client-secret'
}
Nếu bạn cố gắng định cấu hình một nhà cung cấp danh tính đã được định cấu hình cho dự án của mình, lệnh gọi sẽ trả về lỗi HTTP 409. Trong trường hợp này, bạn có thể hãy cập nhật cấu hình đó, như được mô tả bên dưới.
Cập nhật cấu hình nhà cung cấp danh tính OAuth
Để bật/tắt trình cung cấp danh tính OAuth hoặc cập nhật ứng dụng của dự án
cấu hình thì trước tiên hãy lấy cấu hình hiện tại của nhà cung cấp bằng cách thực hiện một GET
yêu cầu đến điểm cuối projects.defaultSupportedIdpConfigs
.
Sau đó, thực hiện thay đổi mà bạn muốn đối với cấu hình và PATCH thay đổi
thành projects.defaultSupportedIdpConfigs
điểm cuối.
Ví dụ: sử dụng 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);
Nếu bạn cố cập nhật cấu hình của nhà cung cấp danh tính mà bạn chưa bao giờ được định cấu hình cho dự án của mình, thì các lệnh gọi sẽ trả về lỗi HTTP 404. Thay vào đó, định cấu hình nhà cung cấp danh tính mới như được hiển thị trong phần trước .