Gérer les fournisseurs SAML et OIDC par programmation

Ce document explique comment utiliser le SDK Admin Identity Platform pour gérer les configurations de fournisseur SAML (Security Assertion Markup Language) 2.0 et OIDC (OpenID Connect) par programmation.

À l'aide du SDK Admin, vous pouvez configurer automatiquement des fournisseurs, effectuer des opérations CRUD de base, alterner des certificats, etc. Cela s'avère utile lorsqu'il s'agit de gérer un grand nombre de fournisseurs qu'il serait laborieux de gérer manuellement avec la Google Cloud console.

Avant de commencer

Travailler avec des fournisseurs SAML

Créer une configuration de fournisseur SAML

Vous devez fournir les paramètres suivants lors de la création d'une configuration de fournisseur SAML. Consultez la documentation de votre fournisseur d'identité pour savoir comment obtenir certaines valeurs.

Nom à afficher
Nom à afficher convivial pour la configuration. Ce nom est également le libellé du fournisseur dans la Google Cloud console.
Activé
Indique si la configuration actuelle du fournisseur est activée ou désactivée. Les utilisateurs ne peuvent pas se connecter avec des fournisseurs désactivés.
ID du fournisseur
Identifiant unique du fournisseur, commençant par saml..
ID d'entité du fournisseur d'identité
ID d'entité du fournisseur.
URL d'authentification unique
URL SSO SAML pour le fournisseur. L'URL doit être valide.
Certificats X.509

Liste des certificats X.509 du fournisseur SAML, y compris les chaînes -----BEGIN CERTIFICATE----- et -----END CERTIFICATE----. Celles-ci sont utilisées pour la signature des jetons sur le fournisseur d'identité.

Lorsque Identity Platform reçoit une réponse SAML, il vérifie sa signature à l'aide d'un certificat enregistré. Si la validation échoue, la réponse sera rejetée. Vous devrez mettre à jour ces certificats à mesure que les clés sont alternées. Pensez à importer plusieurs certificats pour éviter les interruptions lors des rotations.

Relayer l'ID d'entité de groupe
ID d'entité du tiers de confiance SAML (RP/SP). Il s'agit généralement de l'URL de l'application. Dans le fournisseur d'identité SAML, on parle alors d'audience.
URL de rappel

URL à renvoyer une fois l'authentification terminée. Les fournisseurs SAML font généralement référence à cette URL sous forme d'URL du service ACS (Assertion Consumer Service). Vous devez enregistrer cette URL auprès du fournisseur SAML. Elle doit ressembler à https://PROJECT-ID.firebaseapp.com/__/auth/handler, semblable aux URL affichées dans la Google Cloud console. Pour en savoir plus, consultez la section Procéder à la connexion des utilisateurs avec SAML.

L'utilisation de l'URL de rappel par défaut réduit la complexité de validation des réponses SAML. Toutefois, vous pouvez également choisir d'afficher un domaine personnalisé. Dans ce cas, assurez-vous que l'URL de rappel d'Identity Platform pour votre projet est correctement configurée avec votre fournisseur d'identité SAML. Elle ressemble généralement à ceci : https://AUTH-DOMAIN/__/auth/handler.

L'exemple suivant montre comment créer une configuration de fournisseur 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',
    enabled=True,
    provider_id='saml.myProvider',
    idp_entity_id='IDP_ENTITY_ID',
    sso_url='https://example.com/saml/sso/1234/',
    x509_certificates=[
        '-----BEGIN CERTIFICATE-----\nCERT1...\n-----END CERTIFICATE-----',
        '-----BEGIN CERTIFICATE-----\nCERT2...\n-----END CERTIFICATE-----',
    ],
    rp_entity_id='P_ENTITY_ID',
    callback_url='https://project-id.firebaseapp.com/__/auth/handler')

print('Created new SAML provider:', saml.provider_id)

Java

SamlProviderConfig.CreateRequest request = new SamlProviderConfig.CreateRequest()
    .setDisplayName("SAML provider name")
    .setEnabled(true)
    .setProviderId("saml.myProvider")
    .setIdpEntityId("IDP_ENTITY_ID")
    .setSsoUrl("https://example.com/saml/sso/1234/")
    .addX509Certificate("-----BEGIN CERTIFICATE-----\nCERT1...\n-----END CERTIFICATE-----")
    .addX509Certificate("-----BEGIN CERTIFICATE-----\nCERT2...\n-----END CERTIFICATE-----")
    .setRpEntityId("RP_ENTITY_ID")
    .setCallbackUrl("https://project-id.firebaseapp.com/__/auth/handler");
SamlProviderConfig saml = FirebaseAuth.getInstance().createSamlProviderConfig(request);
System.out.println("Created new SAML provider: " + saml.getProviderId());

Une fois l'opération terminée, la méthode renvoie un SAMLAuthProviderConfig objet pour la nouvelle configuration.

Mettre à jour une configuration de fournisseur SAML

L'exemple suivant montre comment modifier la configuration d'un fournisseur SAML. Vous pouvez mettre à jour n'importe quel champ, à l'exception de l'ID du fournisseur.

Node.js

const updatedConfig = {
  x509Certificates: [
    '-----BEGIN CERTIFICATE-----\nCERT2...\n-----END CERTIFICATE-----',
    '-----BEGIN CERTIFICATE-----\nCERT3...\n-----END CERTIFICATE-----',
  ],
};
admin.auth().updateProviderConfig('saml.myProvider', updatedConfig).then(() => {
  // Successful update.
}).catch((error) => {
  // Handle error.
});

Go

updatedConfig := (&auth.SAMLProviderConfigToUpdate{}).
	X509Certificates([]string{
		"-----BEGIN CERTIFICATE-----\nCERT2...\n-----END CERTIFICATE-----",
		"-----BEGIN CERTIFICATE-----\nCERT3...\n-----END CERTIFICATE-----",
	})
saml, err := client.UpdateSAMLProviderConfig(ctx, "saml.myProvider", updatedConfig)
if err != nil {
	log.Fatalf("error updating SAML provider: %v\n", err)
}

log.Printf("Updated SAML provider: %s", saml.ID)

Python

saml = auth.update_saml_provider_config(
    'saml.myProvider',
    x509_certificates=[
        '-----BEGIN CERTIFICATE-----\nCERT2...\n-----END CERTIFICATE-----',
        '-----BEGIN CERTIFICATE-----\nCERT3...\n-----END CERTIFICATE-----',
    ])

print('Updated SAML provider:', saml.provider_id)

Java

SamlProviderConfig.UpdateRequest request =
    new