以编程方式管理 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',