SAML- und OIDC-Anbieter programmatisch verwalten
In diesem Artikel erfahren Sie, wie Sie mit dem Identity Platform Admin SDK die Anbieterkonfigurationen der Security Assertion Markup Language (SAML) 2.0 und von OIDC (OpenID Connect) programmatisch verwalten.
Mit dem Admin SDK können Sie automatisch Anbieter konfigurieren, einfache CRUD-Vorgänge ausführen, Zertifikate rotieren und vieles mehr. Dies ist hilfreich bei einer großen Anzahl an Anbietern, die mit der Google Cloud Console nur sehr aufwändig manuell verwaltet werden können.
Hinweise
Mit SAML-Anbietern arbeiten
SAML-Anbieterkonfiguration erstellen
Zum Erstellen einer SAML-Anbieterkonfiguration müssen Sie die im Folgenden aufgeführten Parameter angeben. Ausführliche Informationen zum Abrufen einiger Werte erhalten Sie in der Dokumentation Ihres Identitätsanbieters.
- Anzeigename
- Ein nutzerfreundlicher Anzeigename für die Konfiguration. Dieser Name dient auch als Anbieterlabel in der Google Cloud Console.
- Aktiviert
- Gibt an, ob die aktuelle Anbieterkonfiguration aktiviert oder deaktiviert ist. Nutzer können sich mit deaktivierten Anbietern nicht anmelden.
- Anbieter-ID
-
Die eindeutige Kennung des Anbieters, die mit
saml.
beginnt. - Entitäts-ID des Identitätsanbieters
- Die Entitäts-ID für den Anbieter.
- SSO-URL
- Die SAML-SSO-URL des Anbieters. Die URL muss gültig sein.
- X.509-Zertifikate
-
Eine Liste der X.509-Zertifikate des SAML-Anbieters, einschließlich der Strings
-----BEGIN CERTIFICATE-----
und-----END CERTIFICATE----
. Diese werden für die Tokensignatur beim Identitätsanbieter verwendet.Wenn Identity Platform eine SAML-Antwort empfängt, wird die Signatur anhand eines eingetragenen Zertifikats geprüft. Wenn die Prüfung fehlschlägt, wird die Antwort abgelehnt. Sollten Schlüssel rotiert werden, müssen Sie diese Zertifikate aktualisieren. Prüfen Sie die Möglichkeit, mehrere Zertifikate hochzuladen, um Ausfälle während der Rotation zu vermeiden.
- Entitäts-ID der vertrauenden Seite
- Die Entitäts-ID der SAML-Anwendung (RP/SP). Dies ist in der Regel die URL der Anwendung. Im SAML-Identitätsanbieter wird diese als Zielgruppe behandelt.
- Rückruf-URL
-
URL, zu der bei Abschluss der Authentifizierung zurückgekehrt werden soll. Für SAML-Anbieter ist dies im Allgemeinen die ACS-URL (Assertion Consumer Service). Sie müssen diese URL beim SAML-Anbieter registrieren. Sie sollte in etwa so aussehen:
https://PROJECT-ID.firebaseapp.com/__/auth/handler
. Dies ist vergleichbar mit der Art und Weise, wie die URLs, die in der Google Cloud Console angezeigt werden. Weitere Informationen finden Sie unter Nutzer mit SAML anmelden.Die Verwendung der Standard-Callback-URL verringert die Komplexität der Validierung von SAML-Antworten. Sie können aber auch eine benutzerdefinierte Domain angeben. Achten Sie in diesem Fall darauf, dass die Callback-URL von Identity Platform für Ihr Projekt ordnungsgemäß mit Ihrem SAML-Identitätsanbieter konfiguriert ist. In der Regel sieht diese in etwa so aus:
https://AUTH-DOMAIN/__/auth/handler
.
Das folgende Beispiel zeigt, wie eine SAML-Anbieterkonfiguration erstellt wird:
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());
Bei Abschluss gibt die Methode ein SAMLAuthProviderConfig
-Objekt für die neu erstellte Konfiguration zurück.
Konfiguration eines SAML-Anbieters aktualisieren
Das folgende Beispiel zeigt, wie eine SAML-Anbieterkonfiguration geändert wird. Mit Ausnahme der Anbieter-ID können Sie alle Felder ändern.
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 SamlProviderConfig.UpdateRequest("saml.myProvider") .addX509Certificate("-----BEGIN CERTIFICATE-----\nCERT2...\n-----END CERTIFICATE-----") .addX509Certificate("-----BEGIN CERTIFICATE-----\nCERT3...\n-----END CERTIFICATE-----"); SamlProviderConfig saml = FirebaseAuth.getInstance().updateSamlProviderConfig(request); System.out.println("Updated SAML provider: " + saml.getProviderId());
Nach Abschluss der Methode wird für die Methode ein SAMLAuthProviderConfig
-Objekt für die aktualisierte Konfiguration zurückgegeben.
SAML-Anbieterkonfiguration abrufen
Die primäre Methode zur Identifizierung einer SAML-Konfiguration ist die Verwendung der Anbieter-ID. Das folgende Beispiel zeigt, wie eine SAML-Anbieterkonfiguration abgerufen wird:
Node.js
admin.auth().getProviderConfig('saml.myProvider').then((config) => {
// Get display name and whether it is enabled.
console.log(config.displayName, config.enabled);
}).catch((error) => {
// Handle error. Common error is that config is not found.
});
Go
saml, err := client.SAMLProviderConfig(ctx, "saml.myProvider") if err != nil { log.Fatalf("error retrieving SAML provider: %v\n", err) } log.Printf("%s %t", saml.DisplayName, saml.Enabled)
Python
saml = auth.get_saml_provider_config('saml.myProvider') print(saml.display_name, saml.enabled)
Java
SamlProviderConfig saml = FirebaseAuth.getInstance().getSamlProviderConfig("saml.myProvider"); System.out.println(saml.getDisplayName() + ": " + saml.isEnabled());
Wenn ein Anbieter mit der angegebenen ID vorhanden ist, gibt die Methode ein SAMLAuthProviderConfig
-Objekt zurück.
SAML-Anbieterkonfiguration löschen
Das folgende Beispiel zeigt, wie eine SAML-Anbieterkonfiguration gelöscht wird:
Node.js
admin.auth().deleteProviderConfig('saml.myProvider').then(() => {
// Successful deletion.
}).catch((error) => {
// Handle error.
});
Go
if err := client.DeleteSAMLProviderConfig(ctx, "saml.myProvider"); err != nil { log.Fatalf("error deleting SAML provider: %v\n", err) }
Python
auth.delete_saml_provider_config('saml.myProvider')
Java
FirebaseAuth.getInstance().deleteSamlProviderConfig("saml.myProvider");
SAML-Anbieterkonfigurationen auflisten
Das folgende Beispiel zeigt, wie Sie vorhandene SAML-Anbieterkonfigurationen auflisten:
Node.js
// Returns 10 SAML provider configs starting from the specified nextPageToken offset.
admin.auth().listProviderConfigs({type: 'saml', maxResults: 10, pageToken: 'nextPageToken'}).then((results) => {
results.providerConfigs.forEach((config) => {
console.log(config.providerId);
});
// To list the next 10:
// return admin.auth().listProviderConfigs(
// {type: 'saml', maxResults: 10, pageToken: results.pageToken});
}).catch((error) => {
// Handle error.
});
Go
iter := client.SAMLProviderConfigs(ctx, "nextPageToken") for { saml, err := iter.Next() if err == iterator.Done { break } if err != nil { log.Fatalf("error retrieving SAML providers: %v\n", err) } log.Printf("%s\n", saml.ID) }
Python
for saml in auth.list_saml_provider_configs('nextPageToken').iterate_all(): print(saml.provider_id)
Java
ListProviderConfigsPage<SamlProviderConfig> page = FirebaseAuth.getInstance() .listSamlProviderConfigs("nextPageToken"); for (SamlProviderConfig config : page.iterateAll()) { System.out.println(config.getProviderId()); }
Jeder Batch von Ergebnissen enthält eine Liste der Anbieterkonfigurationen sowie ein Token für die nächste Seite zum Abrufen des nächsten Batches. Wenn alle Anbieter aufgelistet sind, wird kein Token zurückgegeben.
Standardmäßig werden 100 Anbieter mit jedem Stapel zurückgegeben. Dies ist auch die maximale Anzahl von Anbietern pro Stapel.
Mit OIDC-Anbietern arbeiten
OIDC-Anbieterkonfiguration erstellen
Zum Erstellen einer OIDC-Anbieterkonfiguration müssen Sie die im Folgenden aufgeführten Parameter angeben. Ausführliche Informationen zum Abrufen einiger Werte erhalten Sie in der Dokumentation Ihres Identitätsanbieters.
- Anzeigename
- Ein nutzerfreundlicher Anzeigename für die Konfiguration. Dieser Name dient auch als Anbieterlabel in der Google Cloud Console.
- Aktiviert
- Gibt an, ob die aktuelle Anbieterkonfiguration aktiviert oder deaktiviert ist. Nutzer können sich mit deaktivierten Anbietern nicht anmelden.
- Anbieter-ID
-
Die eindeutige Kennung des Anbieters, die mit
oidc.
beginnt. - Client-ID
- Die ID, mit der die Zielgruppe des ID-Tokens eines OIDC-Anbieters bestätigt wird.
- Client-Secret
- Der Clientschlüssel, der zum Aktivieren des OIDC-Codeablaufs erforderlich ist.
- Aussteller
-
Die
Issuer
des Anbieters. Dieser sollte in etwa so aussehen:https://example.com
. Identity Platform verwendet diese URL zum Ermitteln des OIDC-Discovery-Dokuments. Dies finden Sie normalerweise unter/.well-known/openid-configuration
. Der Wert gibt die OAuth-Endpunkte und öffentlichen Schlüssel des Anbieters an. Identity Platform validiert ID-Tokens gemäß der OpenID Connect-Spezifikation. Wenn Ihr Anbieter die OIDC-Spezifikation für die Erkennung nicht erfüllt, kann er nicht mit Identity Platform verwendet werden. - Antworttyp
- Der Antworttyp des Anbieters für den OAuth-Autorisierungsablauf. Sie können entweder {
idToken
,code
} auftrue
festlegen, aber nicht beides. Wenn der Codeablauf aktiviert ist, müssen Sie einen Clientschlüssel angeben.
Das folgende Beispiel zeigt, wie eine OIDC-Anbieterkonfiguration erstellt wird, die den impliziten Autorisierungsablauf verwendet:
Node.js
const newConfig = {
displayName: 'OIDC provider name',
enabled: true,
clientId: 'CLIENT_ID2',
issuer: 'https://oidc.com/CLIENT_ID2',
providerId: 'oidc.provider2',
responseType: {
idToken: true,
code: false,
},
};
admin.auth().createProviderConfig(newConfig).then(() => {
// Successful creation.
}).catch((error) => {
// Handle error.
});
Go
newConfig := (&auth.OIDCProviderConfigToCreate{}). DisplayName("OIDC provider name"). Enabled(true). ID("oidc.myProvider"). ClientID("CLIENT_ID2"). Issuer("https://oidc.com/CLIENT_ID2") oidc, err := client.CreateOIDCProviderConfig(ctx, newConfig) if err != nil { log.Fatalf("error creating OIDC provider: %v\n", err) } log.Printf("Created new OIDC provider: %s", oidc.ID)
Python
oidc = auth.create_oidc_provider_config( display_name='OIDC provider name', enabled=True, provider_id='oidc.myProvider', client_id='CLIENT_ID2', issuer='https://oidc.com/CLIENT_ID2') print('Created new OIDC provider:', oidc.provider_id)
Java
OidcProviderConfig.CreateRequest request = new OidcProviderConfig.CreateRequest() .setDisplayName("OIDC provider name") .setEnabled(true) .setProviderId("oidc.myProvider") .setClientId("CLIENT_ID2") .setIssuer("https://oidc.com/CLIENT_ID2"); OidcProviderConfig oidc = FirebaseAuth.getInstance().createOidcProviderConfig(request); System.out.println("Created new OIDC provider: " + oidc.getProviderId());
Bei Abschluss gibt die Methode ein OIDCAuthProviderConfig
-Objekt für die neu erstellte Konfiguration zurück.
OIDC-Anbieterkonfiguration aktualisieren
Das folgende Beispiel zeigt, wie Sie eine OIDC-Anbieterkonfiguration aktualisieren. Mit Ausnahme der Anbieter-ID können Sie alle Felder ändern.
Node.js
const updatedConfig = {
displayName: 'OIDC provider name',
enabled: true,
clientId: 'CLIENT_ID',
clientSecret: 'CLIENT_SECRET'
issuer: 'https://oidc.com/',
responseType: {
code: true,
idToken: false,
},
};
admin.auth().updateProviderConfig('oidc.myProvider', updatedConfig).then(() => {
// Successful update.
}).catch((error) => {
// Handle error.
});
Go
updatedConfig := (&auth.OIDCProviderConfigToUpdate{}). DisplayName("OIDC provider name"). Enabled(true). ClientID("CLIENT_ID"). Issuer("https://oidc.com") oidc, err := client.UpdateOIDCProviderConfig(ctx, "oidc.myProvider", updatedConfig) if err != nil { log.Fatalf("error updating OIDC provider: %v\n", err) } log.Printf("Updated OIDC provider: %s", oidc.ID)
Python
oidc = auth.update_oidc_provider_config( 'oidc.myProvider', client_id='CLIENT_ID', issuer='https://oidc.com') print('Updated OIDC provider:', oidc.provider_id)
Java
OidcProviderConfig.UpdateRequest request = new OidcProviderConfig.UpdateRequest("oidc.myProvider") .setDisplayName("OIDC provider name") .setEnabled(true) .setClientId("CLIENT_ID") .setIssuer("https://oidc.com"); OidcProviderConfig oidc = FirebaseAuth.getInstance().updateOidcProviderConfig(request); System.out.println("Updated OIDC provider: " + oidc.getProviderId());
Nach Abschluss der Methode wird für die Methode ein OIDCAuthProviderConfig
-Objekt für die aktualisierte Konfiguration zurückgegeben.
OIDC-Anbieterkonfiguration abrufen
Die OIDC-Konfiguration wird hauptsächlich anhand ihrer Anbieter-ID identifiziert. Das folgende Beispiel zeigt, wie Sie eine OIDC-Anbieterkonfiguration abrufen:
Node.js
admin.auth().getProviderConfig('oidc.myProvider').then((config) => {
// Get display name and whether it is enabled.
console.log(config.displayName, config.enabled);
}).catch((error) => {
// Handle error. Common error is that config is not found.
});
Go
oidc, err := client.OIDCProviderConfig(ctx, "oidc.myProvider") if err != nil { log.Fatalf("error retrieving OIDC provider: %v\n", err) } log.Printf("%s %t", oidc.DisplayName, oidc.Enabled)
Python
oidc = auth.get_oidc_provider_config('oidc.myProvider') print(oidc.display_name, oidc.enabled)
Java
OidcProviderConfig oidc = FirebaseAuth.getInstance().getOidcProviderConfig("oidc.myProvider"); System.out.println(oidc.getDisplayName() + ": " + oidc.isEnabled());
Wenn ein Anbieter mit der angegebenen ID vorhanden ist, gibt die Methode ein OIDCAuthProviderConfig
-Objekt zurück.
OIDC-Anbieterkonfiguration löschen
Das folgende Beispiel zeigt, wie Sie eine OIDC-Anbieterkonfiguration löschen:
Node.js
admin.auth().deleteProviderConfig('oidc.myProvider').then(() => {
// Successful deletion.
}).catch((error) => {
// Handle error.
});
Go
if err := client.DeleteOIDCProviderConfig(ctx, "oidc.myProvider"); err != nil { log.Fatalf("error deleting OIDC provider: %v\n", err) }
Python
auth.delete_oidc_provider_config('oidc.myProvider')
Java
FirebaseAuth.getInstance().deleteOidcProviderConfig("oidc.myProvider");
OIDC-Anbieterkonfigurationen auflisten
Das folgende Beispiel zeigt, wie vorhandene OIDC-Anbieterkonfigurationen aufgelistet werden:
Node.js
// Returns 10 OIDC provider configs starting from the specified nextPageToken offset.
admin.auth().listProviderConfigs({type: 'oidc', maxResults: 10, pageToken: 'nextPageToken'}).then((results) => {
results.providerConfigs.forEach((config) => {
console.log(config.providerId);
});
// To list the next 10:
// return admin.auth().listProviderConfigs(
// {type: 'oidc', maxResults: 10, pageToken: results.pageToken});
}).catch((error) => {
// Handle error.
});
Go
iter := client.OIDCProviderConfigs(ctx, "nextPageToken") for { oidc, err := iter.Next() if err == iterator.Done { break } if err != nil { log.Fatalf("error retrieving OIDC providers: %v\n", err) } log.Printf("%s\n", oidc.ID) }
Python
for oidc in auth.list_oidc_provider_configs('nextPageToken').iterate_all(): print(oidc.provider_id)
Java
ListProviderConfigsPage<OidcProviderConfig> page = FirebaseAuth.getInstance() .listOidcProviderConfigs("nextPageToken"); for (OidcProviderConfig oidc : page.iterateAll()) { System.out.println(oidc.getProviderId()); }
Jeder Batch von Ergebnissen enthält eine Liste der Anbieterkonfigurationen sowie ein Token für die nächste Seite zum Abrufen des nächsten Batches. Wenn alle Anbieter aufgelistet sind, wird kein Token zurückgegeben.
Standardmäßig werden 100 Anbieter mit jedem Stapel zurückgegeben. Dies ist auch die maximale Anzahl von Anbietern pro Stapel.
Nächste Schritte
- Nutzer aus einer vorhandenen Anwendung migrieren
- Nutzer über SAML und OIDC anmelden.