以编程方式管理 SAML 和 OIDC 提供商
本文档介绍如何使用 Identity Platform Admin SDK 以编程方式管理安全断言标记语言 (SAML) 2.0 和 OpenID Connect (OIDC) 提供商配置。
利用 Admin SDK,您可以自动配置提供商、执行基本 CRUD 操作、轮替证书等。如果您有大量提供商,使用 Google Cloud 控制台手动进行管理会非常繁琐,此时这种做法就会非常有用。
准备工作
使用 SAML 提供商
创建 SAML 提供商配置
创建 SAML 提供商配置时,您需要提供以下参数。如需详细了解如何获取某些值,您可能需要参阅身份提供商的文档。
- 显示名称
- 配置的易记显示名。此名称也是 Google Cloud 控制台中的提供商标签。
- 已启用
- 当前提供商配置是启用还是停用。用户无法通过已停用的提供商登录。
- 提供方 ID
- 提供商的唯一标识符,以
saml.开头。 - 身份提供商实体 ID
- 提供商的实体 ID。
- SSO 网址
- 提供商的 SAML SSO 网址。网址必须有效。
- X.509 证书
-
SAML 提供商 X.509 证书的列表,包括
-----BEGIN CERTIFICATE-----和-----END CERTIFICATE----字符串。这些证书用于对身份提供商进行令牌签名。当 Identity Platform 收到 SAML 响应时,将使用记录的证书验证其签名。如果验证失败,响应将被拒绝。密钥轮替时,您需要更新这些证书。请考虑上传多个证书,以防止在轮替期间发生中断。
- 依赖方实体 ID
- SAML 依赖方 (RP/SP) 实体 ID。这通常是应用的网址。SAML 身份提供商称其为受众。
- 回调网址
-
身份验证完成后要返回到的网址。SAML 提供商通常将此网址称为断言消费者服务 (ACS) 网址。您需要向 SAML 提供商注册此网址。它的格式为
https://PROJECT-ID.firebaseapp.com/__/auth/handler,类似于 Google Cloud 控制台中显示的网址。如需了解详情,请参阅让用户通过 SAML 登录。使用默认回调网址将降低验证 SAML 响应的复杂程度。但是,您也可以选择显示自定义网域。在这种情况下,请确保为 SAML 身份提供商正确配置了项目的 Identity Platform 回调网址。它的格式通常为
https://AUTH-DOMAIN/__/auth/handler。
以下示例展示了如何创建 SAML 提供商配置:
Node.js
const newConfig = {
displayName: 'SAML provider name',
enabled: true,
providerId: 'saml.myProvider',
idpEntityId: 'IDP_ENTITY_ID',
ssoURL: 'https://example.com/saml/sso/1234/'
x509Certificates: [
'-----BEGIN CERTIFICATE-----\nCERT1...\n-----END CERTIFICATE-----',
'-----BEGIN CERTIFICATE-----\nCERT2...\n-----END CERTIFICATE-----',
],
rpEntityId: 'RP_ENTITY_ID',
// Using the default callback URL.
callbackURL: 'https://project-id.firebaseapp.com/__/auth/handler',
};
admin.auth().createProviderConfig(newConfig).then(() => {
// Successful creation.
}).catch((error) => {
// Handle error.
});
Go
newConfig := (&auth.SAMLProviderConfigToCreate{}). DisplayName("SAML provider name"). Enabled(true). ID("saml.myProvider"). IDPEntityID("IDP_ENTITY_ID"). SSOURL("https://example.com/saml/sso/1234/"). X509Certificates([]string{ "-----BEGIN CERTIFICATE-----\nCERT1...\n-----END CERTIFICATE-----", "-----BEGIN CERTIFICATE-----\nCERT2...\n-----END CERTIFICATE-----", }). RPEntityID("RP_ENTITY_ID"). CallbackURL("https://project-id.firebaseapp.com/__/auth/handler") saml, err := client.CreateSAMLProviderConfig(ctx, newConfig) if err != nil { log.Fatalf("error creating SAML provider: %v\n", err) } log.Printf("Created new SAML provider: %s", saml.ID)
Python
saml = auth.create_saml_provider_config( display_name='SAML provider name',