Lakukan penyiapan end-to-end untuk single sign-on (SSO) berbasis peran dari Shibboleth ke Alibaba Cloud, termasuk pertukaran metadata SAML, pemetaan atribut, dan konfigurasi NameID.
Sebelum memulai
-
Instal Shibboleth, Tomcat, dan server Lightweight Directory Access Protocol (LDAP).
-
Konfigurasikan server LDAP.
Untuk contoh ini, tambahkan akun administrator ke LDAP dengan distinguished name (DN)
uid=admin,ou=systemdan passwordsecret.Tambahkan akun uji coba ke LDAP dengan DN
cn=Test User,ou=users,dc=wimpi,dc=netdan passwordsecret. Detail akun ditampilkan pada gambar berikut.
Bidang informasi pengguna:
-
mail: Dipetakan ke nama logon Pengguna RAM di Alibaba Cloud.
-
memberof: Dipetakan ke nama Peran RAM di Alibaba Cloud.
-
samaccountname: Username yang digunakan untuk login ke Shibboleth.
-
userpassword: Kata sandi logon.
-
-
Konfigurasikan Shibboleth untuk terhubung ke server LDAP.
Ubah pengaturan berikut dalam file
/opt/shibboleth-idp/conf/ldap.properties:# Mode autentikasi LDAP idp.authn.LDAP.authenticator = bindSearchAuthenticator # Alamat server LDAP idp.authn.LDAP.ldapURL = ldaps://[LDAP-server-address]:389 # Nonaktifkan TLS dan SSL idp.authn.LDAP.useStartTLS = false idp.authn.LDAP.useSSL = false # Direktori pencarian dasar idp.authn.LDAP.baseDN = dc=wimpi,dc=net idp.authn.LDAP.subtreeSearch = true # Aturan pencocokan logon. samaccountname adalah bidang dalam data pengguna yang digunakan untuk logon LDAP. idp.authn.LDAP.userFilter= (samaccountname={user}) # Akun dan password admin idp.authn.LDAP.bindDN = uid=admin,ou=system idp.authn.LDAP.bindDNCredential = secret idp.attribute.resolver.LDAP.searchFilter =(samaccountname=$resolutionContext.principal)
Konfigurasi Shibboleth dalam topik ini hanya untuk demonstrasi, dimaksudkan untuk menggambarkan proses end-to-end penyiapan SSO dengan Alibaba Cloud. Alibaba Cloud tidak menyediakan layanan konsultasi untuk konfigurasi Shibboleth.
Langkah 1: Dapatkan metadata service provider SAML
-
Login ke Konsol RAM sebagai administrator RAM.
-
Di panel navigasi sebelah kiri, pilih .
-
Di tab Role-based SSO, klik tab SAML dan salin URL metadata service provider SAML Alibaba Cloud.
-
Buka tautan yang disalin di jendela browser baru dan simpan file metadata sebagai
/opt/shibboleth-idp/metadata/aliyun-ram-role-metadata.xml.CatatanCatat nilai atribut
entityIDdari elemenEntityDescriptor. Nilai ini diperlukan untuk konfigurasi selanjutnya di Shibboleth.
Langkah 2: Daftarkan Alibaba Cloud ke Shibboleth
Dalam /opt/shibboleth-idp/conf/metadata-providers.xml, tentukan file metadata dari Langkah 1: Dapatkan metadata service provider SAML untuk mendaftarkan Alibaba Cloud ke Shibboleth.
<!--
<MetadataProvider id="LocalMetadata" xsi:type="FilesystemMetadataProvider" metadataFile="PATH_TO_YOUR_METADATA"/>
-->
<!-- Temukan kode yang dikomentari di atas dan ganti dengan kode berikut. -->
<MetadataProvider id="AliyunMetadata" xsi:type="FilesystemMetadataProvider" metadataFile="%{idp.home}/metadata/aliyun-ram-role-metadata.xml"/>
Langkah 3: Dapatkan metadata IdP SAML
-
Mulai ulang Tomcat untuk menerapkan perubahan Anda.
-
Akses
https://<alamat server Anda>/idp/shibbolethdan simpan file metadata ke mesin lokal Anda.
Langkah 4: Buat penyedia identitas SAML
-
Login ke Konsol RAM menggunakan Akun Alibaba Cloud Anda.
-
Di panel navigasi sebelah kiri, pilih Integrations > SSO.
-
Di tab Role-based SSO, klik tab SAML, lalu klik Create IdP.
-
Di halaman Create IdP, masukkan IdP Name (shibboleth-provider) dan Note.
-
Di bagian Metadata File, klik Upload Metadata File dan unggah metadata IdP dari Langkah 3: Dapatkan metadata IdP SAML.
-
Klik Create IdP.
Catat ARN penyedia identitas baru untuk langkah selanjutnya.
Langkah 5: Buat peran RAM
-
Di panel navigasi sebelah kiri Konsol RAM, pilih .
-
Di halaman Roles, klik Create Role.
-
Di pojok kanan atas halaman Create Role, klik Switch to Policy Editor.
-
Tentukan penyedia identitas SAML di editor.
Di Visual Editor, atur Principal ke penyedia identitas (shibboleth-provider) dari Langkah 4: Buat penyedia identitas SAML. Untuk IdP Type, pilih SAML.
-
Di editor, atur kondisi
saml:recipientkehttps://signin.alibabacloud.com/saml-role/sso. -
Di kotak dialog Create Role, masukkan Role Name (worker) dan klik OK.
Catat ARN Peran RAM baru untuk langkah selanjutnya.
Langkah 6: Konfigurasikan atribut pengguna di Shibboleth
-
Ubah file
/opt/shibboleth/conf/services.xml.attribute-resolver.xmlbawaan tidak memiliki pengaturan yang diperlukan. Ganti denganattribute-resolver-full.xml.<value>%{idp.home}/conf/attribute-resolver.xml</value> <!-- Temukan kode di atas dan ganti dengan kode berikut. --> <value>%{idp.home}/conf/attribute-resolver-full.xml</value> -
Ubah file
/opt/shibboleth/conf/attribute-resolver-full.xml.-
Konfigurasikan Shibboleth untuk mengembalikan atribut pengguna
maildanmemberof.iddari atributmemberofadalahrole, yang merepresentasikan peran pengguna.ReturnValueadalah<bagian dari ARN peran tanpa nama peran (worker)>+'$1',<ARN service provider>. Dapatkan<ARN service provider>dari Langkah 4: Buat penyedia identitas SAML danARN perandari Langkah 5: Buat peran RAM.CatatanNama peran diganti dengan
$1untuk mendukung beberapa peran. Ubah peran pengguna dengan menyesuaikan bidangmemberofdalam informasi pengguna.memberofadalah atribut kustom. Anda dapat menggantinya dengan atribut apa pun yang menunjukkan peran pengguna.<!-- ========================================== --> <!-- Attribute Definitions --> <!-- ========================================== --> <!-- Schema: Core schema attributes--> <!-- Temukan komentar di atas dan tambahkan kode berikut setelahnya. --> <AttributeDefinition xsi:type="Simple" id="mail"> <InputDataConnector ref="myLDAP" attributeNames="mail" /> <AttributeEncoder xsi:type="SAML1String" name="urn:mace:dir:attribute-def:mail" encodeType="false" /> <AttributeEncoder xsi:type="SAML2String" name="https://www.aliyun.com/SAML-Role/Attributes/RoleSessionName" friendlyName="mail" encodeType="false" /> </AttributeDefinition> <AttributeDefinition xsi:type="Mapped" id="role"> <InputDataConnector ref="myLDAP" attributeNames="memberof" /> <AttributeEncoder xsi:type="SAML1String" name="urn:mace:dir:attribute-def:role" encodeType="false" /> <AttributeEncoder xsi:type="SAML2String" name="https://www.aliyun.com/SAML-Role/Attributes/Role" friendlyName="role" encodeType="false" /> <ValueMap> <ReturnValue>acs:ram::114*******71701:role/$1,acs:ram::114*******71701:saml-provider/shibboleth-provider</ReturnValue> <SourceValue>(.+)</SourceValue> </ValueMap> </AttributeDefinition> -
Koneksi LDAP ini membaca pengaturannya dari
/opt/shibboleth/conf/ldap.properties.<!-- Example LDAP Connector --> <!-- <DataConnector id="myLDAP" xsi:type="LDAPDirectory" ldapURL="%{idp.attribute.resolver.LDAP.ldapURL}" baseDN="%{idp.attribute.resolver.LDAP.baseDN}" principal="%{idp.attribute.resolver.LDAP.bindDN}" principalCredential="%{idp.attribute.resolver.LDAP.bindDNCredential}" useStartTLS="%{idp.attribute.resolver.LDAP.useStartTLS:true}" ...omitted... </DataConnector> --> <!-- Temukan contoh kode di atas dan ganti dengan kode berikut. --> <DataConnector id="myLDAP" xsi:type="LDAPDirectory" ldapURL="%{idp.attribute.resolver.LDAP.ldapURL}" baseDN="%{idp.attribute.resolver.LDAP.baseDN}" principal="%{idp.attribute.resolver.LDAP.bindDN}" principalCredential="%{idp.attribute.resolver.LDAP.bindDNCredential}" useStartTLS="%{idp.attribute.resolver.LDAP.useStartTLS}" connectTimeout="%{idp.attribute.resolver.LDAP.connectTimeout}" responseTimeout="%{idp.attribute.resolver.LDAP.responseTimeout}"> <FilterTemplate> <![CDATA[ %{idp.attribute.resolver.LDAP.searchFilter} ]]> </FilterTemplate> </DataConnector>
-
-
Tambahkan filter atribut di
/opt/shibboleth/conf/attribute-filter.xml.Atur
valuedalam tagPolicyRequirementRulekeentityIDAlibaba Cloud dari Langkah 1: Dapatkan metadata service provider SAML.<AttributeFilterPolicyGroup id="ShibbolethFilterPolicy" xmlns="urn:mace:shibboleth:2.0:afp" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:mace:shibboleth:2.0:afp http://shibboleth.net/schema/idp/shibboleth-afp.xsd"> <!-- Temukan kode di atas dan tambahkan kode berikut setelahnya. --> <AttributeFilterPolicy id="aliyun"> <PolicyRequirementRule xsi:type="Requester" value="[entityID]" /> <AttributeRule attributeID="mail"> <PermitValueRule xsi:type="ANY" /> </AttributeRule> <AttributeRule attributeID="role"> <PermitValueRule xsi:type="ANY" /> </AttributeRule> </AttributeFilterPolicy>
Langkah 7: Konfigurasikan NameID
-
Konfigurasikan NameID untuk Alibaba Cloud di
/opt/shibboleth/conf/relying-party.xml.Atur
relyingPartyIdsdalam tagbeankeentityIDAlibaba Cloud dari Langkah 1: Dapatkan metadata service provider SAML.<!-- Override example that identifies a single RP by name and configures it for SAML 2 SSO without encryption. This is a common "vendor" scenario. --> <!-- <bean parent="RelyingPartyByName" c:relyingPartyIds="https://sp.example.org"> <property name="profileConfigurations"> <list> <bean parent="SAML2.SSO" p:encryptAssertions="false" /> </list> </property> </bean> --> <!-- Temukan kode yang dikomentari di atas dan ganti dengan kode berikut. --> <bean parent="RelyingPartyByName" c:relyingPartyIds="[entityID]"> <property name="profileConfigurations"> <list> <bean parent="SAML2.SSO" p:encryptAssertions="false" p:nameIDFormatPrecedence="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress" /> </list> </property> </bean> -
Konfigurasikan pembuatan NameID di
/opt/shibboleth/conf/saml-nameid.xml.<!-- Temukan dua blok kode berikut dan hapus komentarnya untuk menerapkan konfigurasi. --> <bean parent="shibboleth.SAML2AttributeSourcedGenerator" p:omitQualifiers="true" p:format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress" p:attributeSourceIds="#{ {'mail'} }" /> <bean parent="shibboleth.SAML1AttributeSourcedGenerator" p:omitQualifiers="true" p:format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress" p:attributeSourceIds="#{ {'mail'} }" /> -
Perbarui properti NameID di
/opt/shibboleth/conf/saml-nameid.properties.idp.nameid.saml2.default = urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress idp.persistentId.useUnfilteredAttributes = true idp.persistentId.encoding = BASE32
Langkah 8: Mulai ulang Tomcat
Mulai ulang Tomcat untuk menerapkan perubahan Anda.
Uji SSO berbasis peran
Uji integrasi SSO setelah menyelesaikan konfigurasi.
-
Akses
https://<alamat server Anda>/idp/profile/SAML2/Unsolicited/SSO?providerId=<entityID>.Dalam URL tersebut,
<entityID>adalahentityIDAlibaba Cloud dari Langkah 1: Dapatkan metadata service provider SAML. -
Di halaman login Shibboleth, masukkan username dan password Anda, lalu klik Log On.
Sistem melakukan SSO dan login Anda ke konsol Alibaba Cloud sebagai peran yang ditentukan (worker).
FAQ
Periksa /opt/shibboleth-idp/logs/idp-process.log untuk detail error. Masalah umum:
Login gagal meskipun kredensial benar
Periksa /opt/shibboleth-idp/logs/idp-process.log. Jika error terkait ValidateUsernamePassword, verifikasi konfigurasi koneksi LDAP. Pastikan bagian yang dikomentari diaktifkan dengan benar tanpa spasi tambahan.
Login tidak responsif dan muncul error unable to connect to the ldap
Periksa pengaturan koneksi LDAP di file ldap.properties dan attribute-resolver-full.xml.
Error redirect: The NameID is missing
Verifikasi pemetaan atribut mail di Langkah 6: Konfigurasikan atribut pengguna di Shibboleth dan konfigurasi NameID di Langkah 7: Konfigurasikan NameID.
Mengakses https://<alamat server Anda>/idp/profile/SAML2/Unsolicited/SSO?providerId=<entityID> menghasilkan error Unsupported Request
Verifikasi bahwa entityID benar. entityID harus konsisten di seluruh file metadata dalam folder metadata, attribute-filter.xml, dan relying-party.xml.
Error redirect: Cannot find SAML role attribute which is required
Di Langkah 6: Konfigurasikan atribut pengguna di Shibboleth, verifikasi pemetaan atribut memberof ke role dan nilai ReturnValue.
Error redirect: Cannot find SAML role session name attribute which is required
Di Langkah 6: Konfigurasikan atribut pengguna di Shibboleth, verifikasi bahwa name dari atribut mail adalah https://www.aliyun.com/SAML-Role/Attributes/RoleSessionName. Hal ini umum terjadi saat mengonversi konfigurasi SSO berbasis pengguna ke SSO berbasis peran tanpa memperbarui nilai name.
Error redirect: The response signature is invalid
Unggah ulang metadata Shibboleth ke Alibaba Cloud.