Google Cloud Identity Platform REST API'yi kullanarak Firebase projesinin OAuth kimlik sağlayıcısını (IdP) programatik olarak yönetme yapılandırma. Bu API ile istediğiniz kimlik sağlayıcıları yapılandırabilirsiniz. ve bu OAuth'un mevcut OAuth kullanımını desteklemek ve güncellemek, etkinleştirmek ve devre dışı bırakmak için yapılandırmanın üç yolu vardır.
Yetkilendirmeyi al
REST API'yi çağırabilmeniz için öncelikle, Firebase projenize düzenleyici erişimi. Örneğin, bir erişim jetonu almak için Node.js'de bir hizmet hesabı kullanarak:
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);
}
Yeni bir OAuth kimlik sağlayıcı yapılandırması ekleyin
Yeni bir OAuth kimlik sağlayıcı (IdP) yapılandırması eklemek için yeni
projects.defaultSupportedIdpConfigs
için yapılandırma
uç nokta.
Kimlik sağlayıcı kimliğini ve istemci kimliğinizi belirtmeniz gerekir. genellikle sağlayıcının geliştirici sitesinden aldığınız istemci gizli anahtarı. Burası Firebase'in desteklediği kimlik sağlayıcılar ve kimlikleri şunlardır:
Sağlayıcı | IdP Kimliği |
---|---|
Apple | apple.com |
Apple Oyun Merkezi | 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 |
Örneğin, Node.js kullanarak:
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);
Çağrı başarılı olursa, yeni oluşturulan yapılandırmayı döndürür. Örneğin:
{
name: 'projects/your-numerical-project-id/defaultSupportedIdpConfigs/facebook.com',
enabled: true,
clientId: 'your-facebook-client-id',
clientSecret: 'your-facebook-client-secret'
}
Daha önce yapılandırılmış bir kimlik sağlayıcıyı yapılandırmaya çalışırsanız çağrı, projeniz için HTTP 409 hatası döndürüyor. Böyle bir durumda, yapılandırmayı aşağıda açıklandığı gibi güncelleyin.
OAuth kimlik sağlayıcı yapılandırmasını güncelleme
Bir OAuth kimlik sağlayıcısını etkinleştirmek veya devre dışı bırakmak ya da projenizin istemcisini güncellemek için
yapılandırmasının ayarlarını yapmak için bir GET
projects.defaultSupportedIdpConfigs
uç noktasına isteği gönderebilirsiniz.
Ardından, yapılandırmada istediğiniz değişiklikleri yapın ve yeni yapılandırmaya yama ekleyin.
projects.defaultSupportedIdpConfigs
için yapılandırma
uç nokta.
Örneğin, Node.js kullanarak:
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);
Daha önce hiç yapmadığınız bir kimlik sağlayıcının yapılandırmasını güncellemeye çalışırsanız yapılandırdıysanız çağrılar HTTP 404 hatası döndürecektir. Bunun yerine aşağıda gösterildiği gibi yeni bir kimlik sağlayıcı yapılandırın: bölümünü inceleyin.