Google Cloud Identity Platform REST API を使用して、Firebase プロジェクトの OAuth ID プロバイダ(IdP)の構成をプログラムで管理できます。この API を使用すると、サポートする ID プロバイダを設定し、プロジェクトの現在の 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 ID プロバイダの構成を追加する
新しい OAuth ID プロバイダ(IdP)の構成を追加するには、新しい構成を projects.defaultSupportedIdpConfigs
エンドポイントに POST します。
ID プロバイダの ID と、通常はプロバイダのデベロッパー サイトから取得するクライアント ID とクライアント シークレットを指定する必要があります。Firebase がサポートする ID プロバイダとその ID は次のとおりです。
プロバイダ | IdP ID |
---|---|
Apple | apple.com |
Apple Game Center | gc.apple.com |
facebook.com |
|
GitHub | github.com |
google.com |
|
Google Play ゲーム | 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'
}
プロジェクトに対してすでに設定されている ID プロバイダを設定しようとすると、呼び出しは HTTP エラー 409 を返します。この場合は、以下のように設定を更新できます。
OAuth ID プロバイダの構成を更新する
OAuth ID プロバイダを有効または無効にしたり、またはプロジェクトのクライアント構成を更新したりするには、まず projects.defaultSupportedIdpConfigs
エンドポイントに GET リクエストを送信してプロバイダの現在の構成を取得します。次に、設定に必要な変更を加え、新しい構成を 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);
プロジェクトに対して構成したことがない ID プロバイダの構成を更新しようとすると、呼び出しは HTTP エラー 404 を返します。代わりに、前のセクションの説明に沿って新しい ID プロバイダを設定します。