Mengelola penyedia SAML dan OIDC secara terprogram
Dokumen ini menunjukkan cara menggunakan Identity Platform Admin SDK untuk mengelola konfigurasi penyedia Security Assertion Markup Language (SAML) 2.0 dan OpenID Connect (OIDC) secara terprogram.
Dengan Admin SDK, Anda dapat mengonfigurasi penyedia secara otomatis, melakukan operasi CRUD dasar, merotasi sertifikat, dan lainnya. Hal ini berguna ketika Anda memiliki sejumlah besar penyedia yang rumit untuk dikelola secara manual menggunakan Konsol Google Cloud.
Sebelum memulai
Bekerja sama dengan penyedia SAML
Membuat konfigurasi penyedia SAML
Anda harus menyediakan parameter berikut saat membuat konfigurasi penyedia SAML. Anda mungkin perlu membaca dokumentasi penyedia identitas untuk mengetahui detail tentang cara mendapatkan beberapa nilai.
- Nama tampilan
- Nama tampilan yang mudah digunakan untuk konfigurasi. Nama ini juga merupakan label penyedia di Konsol Google Cloud.
- Diaktifkan
- Apakah konfigurasi penyedia saat ini diaktifkan atau dinonaktifkan. Pengguna tidak dapat login dengan penyedia yang dinonaktifkan.
- ID Penyedia
-
ID unik penyedia, dimulai dengan
saml.
. - ID entitas penyedia identitas
- ID entitas untuk penyedia.
- URL SSO
- URL SSO SAML untuk penyedia. URL harus valid.
- Sertifikat X.509
-
Daftar sertifikat X.509 penyedia SAML, termasuk string
-----BEGIN CERTIFICATE-----
dan-----END CERTIFICATE----
. ID ini digunakan untuk penandatanganan token pada penyedia identitas.Ketika Identity Platform menerima respons SAML, ia akan memverifikasi tanda tangannya menggunakan sertifikat pada rekaman. Jika verifikasi gagal, respons akan ditolak. Anda harus memperbarui sertifikat ini saat kunci dirotasi. Pertimbangkan untuk mengupload beberapa sertifikat guna mencegah gangguan selama rotasi.
- ID entitas pihak yang meneruskan
- ID entitas pihak tepercaya (RP/SP) SAML. Ini biasanya adalah URL aplikasi. Di penyedia identitas SAML, ini disebut sebagai audience.
- URL callback
-
URL yang akan menjadi tujuan saat autentikasi selesai. Penyedia SAML biasanya menyebutnya sebagai URL Assertion Consumer Service (ACS). Anda harus mendaftarkan URL ini ke penyedia SAML. URL tersebut akan terlihat seperti
https://PROJECT-ID.firebaseapp.com/__/auth/handler
, mirip dengan URL yang ditampilkan di Konsol Google Cloud. Untuk mempelajari lebih lanjut, lihat Memproses login pengguna dengan SAML.Menggunakan URL callback default akan mengurangi kerumitan validasi respons SAML. Namun, Anda juga dapat memilih untuk menampilkan domain kustom. Dalam hal ini, pastikan URL callback Identity Platform untuk project Anda dikonfigurasi dengan benar menggunakan penyedia identitas SAML Anda. Biasanya akan terlihat seperti ini
https://AUTH-DOMAIN/__/auth/handler
.
Contoh berikut menunjukkan cara membuat konfigurasi penyedia 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());
Setelah selesai, metode akan menampilkan objek
SAMLAuthProviderConfig
untuk konfigurasi yang baru dibuat.
Memperbarui konfigurasi penyedia SAML
Contoh berikut menunjukkan cara mengubah konfigurasi penyedia SAML. Anda dapat memperbarui kolom apa pun, kecuali ID penyedia.
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());
Setelah selesai, metode akan menampilkan objek
SAMLAuthProviderConfig
untuk konfigurasi yang diperbarui.
Mendapatkan konfigurasi penyedia SAML
Cara utama untuk mengidentifikasi konfigurasi SAML adalah dengan menggunakan ID penyedianya. Contoh berikut menunjukkan cara mendapatkan konfigurasi penyedia SAML:
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());
Jika penyedia dengan ID yang diberikan sudah ada, metode akan menampilkan
objek
SAMLAuthProviderConfig
.
Menghapus konfigurasi penyedia SAML
Contoh berikut menunjukkan cara menghapus konfigurasi penyedia SAML:
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");
Mencantumkan konfigurasi penyedia SAML
Contoh berikut menunjukkan cara mencantumkan konfigurasi penyedia SAML yang ada:
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()); }
Setiap batch hasil berisi daftar konfigurasi penyedia, dan token halaman berikutnya yang digunakan untuk mengambil batch berikutnya. Setelah semua penyedia telah tercantum, tidak ada token yang ditampilkan.
Secara default, 100 penyedia ditampilkan dengan setiap batch. Ini juga merupakan jumlah maksimum penyedia per batch.
Bekerja sama dengan penyedia OIDC
Membuat konfigurasi penyedia OIDC
Anda harus menyediakan parameter berikut saat membuat konfigurasi penyedia OIDC. Anda mungkin perlu membaca dokumentasi penyedia identitas untuk mengetahui detail tentang cara mendapatkan beberapa nilai.
- Nama tampilan
- Nama tampilan yang mudah digunakan untuk konfigurasi. Nama ini juga merupakan label penyedia di Konsol Google Cloud.
- Diaktifkan
- Apakah konfigurasi penyedia saat ini diaktifkan atau dinonaktifkan. Pengguna tidak dapat login dengan penyedia yang dinonaktifkan.
- ID Penyedia
-
ID unik penyedia, dimulai dengan
oidc.
. - Client ID
- ID yang digunakan untuk mengonfirmasi audiens token ID penyedia OIDC.
- Rahasia Klien
- Rahasia klien yang diperlukan untuk mengaktifkan alur kode OIDC.
- Penerbit
-
Issuer
penyedia. Tampilannya akan terlihat sepertihttps://example.com
. Identity Platform menggunakan URL ini untuk menemukan dokumen penemuan OIDC (biasanya ditemukan di/.well-known/openid-configuration
), yang menentukan endpoint OAuth dan kunci publik penyedia. Identity Platform memvalidasi token ID sesuai dengan spesifikasi OpenID Connect. Jika tidak mematuhi spesifikasi OIDC untuk penemuan, penyedia Anda tidak akan berfungsi dengan Identity Platform. - Jenis Respons
-
Jenis respons penyedia untuk alur otorisasi OAuth. Anda dapat menetapkan salah satu dari {
idToken
,code
} ketrue
, bukan keduanya. Jika alur kode diaktifkan, Anda harus memberikan rahasia klien.
Contoh berikut menunjukkan cara membuat konfigurasi penyedia OIDC yang menggunakan alur otorisasi implisit:
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());
Setelah selesai, metode akan menampilkan objek
OIDCAuthProviderConfig
untuk konfigurasi yang baru dibuat.
Memperbarui konfigurasi penyedia OIDC
Contoh berikut menunjukkan cara mengubah konfigurasi penyedia OIDC. Anda dapat memperbarui kolom apa pun, kecuali ID penyedia.
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());
Setelah selesai, metode akan menampilkan objek
OIDCAuthProviderConfig
untuk konfigurasi yang diperbarui.
Mendapatkan konfigurasi penyedia OIDC
Cara utama untuk mengidentifikasi konfigurasi OIDC adalah dengan menggunakan ID penyedianya. Contoh berikut menunjukkan cara mendapatkan konfigurasi penyedia OIDC:
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());
Jika penyedia dengan ID yang diberikan sudah ada, metode akan menampilkan
objek
OIDCAuthProviderConfig
.
Menghapus konfigurasi penyedia OIDC
Contoh berikut menunjukkan cara menghapus konfigurasi penyedia OIDC:
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");
Mencantumkan konfigurasi penyedia OIDC
Contoh berikut menunjukkan cara menampilkan daftar konfigurasi penyedia OIDC yang ada:
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()); }
Setiap batch hasil berisi daftar konfigurasi penyedia, dan token halaman berikutnya yang digunakan untuk mengambil batch berikutnya. Jika semua penyedia telah tercantum, tidak ada token yang ditampilkan.
Secara default, 100 penyedia ditampilkan dengan setiap batch. Ini juga merupakan jumlah maksimum penyedia per batch.
Langkah selanjutnya
- Migrasikan pengguna dari aplikasi yang ada.
- Proses login pengguna dengan SAML dan OIDC.