Topik ini memberikan contoh cara mengimplementasikan Single Sign-On (SSO) berbasis peran dari Shibboleth ke Alibaba Cloud, mencakup proses SSO berbasis peran end-to-end dari penyedia identitas (IdP) ke Alibaba Cloud.
Persiapan
Instal Shibboleth, Tomcat, dan server LDAP.
Konfigurasikan server LDAP.
Untuk contoh ini, tambahkan akun administrator ke LDAP dengan DN
uid=admin,ou=systemdan kata sandisecret.Tambahkan akun uji coba ke LDAP dengan DN
cn=Test User,ou=users,dc=wimpi,dc=netdan kata sandisecret. Gambar berikut menunjukkan detailnya.
Bidang informasi pengguna:
mail: Sesuai dengan nama logon Pengguna RAM.
memberof: Sesuai dengan nama Peran RAM.
samaccountname: Nama pengguna untuk masuk ke Shibboleth.
userpassword: Kata sandi logon.
Konfigurasikan Shibboleth agar terhubung ke server LDAP.
Ubah data berikut dalam file
/opt/shibboleth-idp/conf/ldap.properties:# Mode autentikasi LDAP idp.authn.LDAP.authenticator = bindSearchAuthenticator # Alamat LDAP idp.authn.LDAP.ldapURL = ldaps://[alamat server LDAP]:389 # Nonaktifkan TSL 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 dan digunakan untuk masuk ke LDAP. idp.authn.LDAP.userFilter= (samaccountname={user}) # Akun dan kata sandi 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 bersifat saran dan hanya disediakan untuk membantu Anda memahami proses logon SSO end-to-end. Alibaba Cloud tidak menyediakan layanan konsultasi untuk konfigurasi Shibboleth.
Langkah 1: Unduh file metadata SAML SP Alibaba Cloud
Masuk ke Konsol RAM sebagai administrator RAM.
Di panel navigasi sebelah kiri, pilih .
Pada tab Role-based SSO, klik tab SAML dan salin URL file metadata penyedia layanan (SP) Security Assertion Markup Language (SAML).
Buka tautan yang telah disalin di jendela browser baru dan simpan file XML metadata ke
/opt/shibboleth-idp/metadata/aliyun-ram-role-metadata.xml.CatatanFile XML metadata berisi informasi akses untuk Alibaba Cloud sebagai penyedia layanan (SP) SAML. Catat nilai atribut
entityIDdalam elemenEntityDescriptor. Nilai ini akan Anda perlukan nanti saat mengonfigurasi Shibboleth.
Langkah 2: Daftarkan Alibaba Cloud ke Shibboleth
Konfigurasikan file /opt/shibboleth-idp/conf/metadata-providers.xml dengan menentukan file metadata yang diperoleh di Langkah 1: Unduh file metadata SAML SP Alibaba Cloud untuk mendaftarkan Alibaba Cloud ke Shibboleth.
<!--
<MetadataProvider id="LocalMetadata" xsi:type="FilesystemMetadataProvider" metadataFile="PATH_TO_YOUR_METADATA"/>
-->
<!-- Temukan kode yang ditampilkan pada baris sebelumnya dalam file dan ganti kode tersebut dengan kode yang ditampilkan pada baris berikut. -->
<MetadataProvider id="AliyunMetadata" xsi:type="FilesystemMetadataProvider" metadataFile="%{idp.home}/metadata/aliyun-ram-role-metadata.xml"/>Langkah 3: Dapatkan file metadata SAML IdP di Shibboleth
Mulai ulang Apache Tomcat agar konfigurasi sebelumnya berlaku.
Akses
https:///<alamat server Anda>/idp/shibbolethdan simpan file metadata ke komputer Anda.
Langkah 4: Buat SAML IdP di Alibaba Cloud
Masuk ke Konsol RAM dengan Akun Alibaba Cloud Anda.
Di panel navigasi sebelah kiri, pilih Integrations > SSO.
Di tab Role-based SSO, klik tab SAML, lalu klik Add IdP.
Di halaman Create IdP, atur IdP Name menjadi shibboleth-provider dan konfigurasikan Remarks.
Di bagian Metadata File, klik Upload Metadata dan unggah metadata IdP yang diperoleh di Langkah 3: Dapatkan file metadata SAML IdP di Shibboleth.
Klik Create IdP.
Lihat detail IdP yang telah dibuat dan catat Nama Sumber Daya Alibaba Cloud (ARN) IdP tersebut untuk digunakan selanjutnya.
Langkah 5: Buat peran RAM di Alibaba Cloud
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 SAML IdP di editor.
Editor mendukung dua mode: editor visual dan editor skrip. Contoh ini menggunakan editor visual. Di bagian Principal, atur Identity Provider Type menjadi SAML dan pilih IdP yang telah dibuat di Langkah 4: Buat SAML IdP di Alibaba Cloud (shibboleth-provider).
Di editor, atur kondisi
saml:recipientmenjadihttps://signin.alibabacloud.com/saml-role/sso.Di kotak dialog Create Role, atur parameter Role Name menjadi worker, lalu klik OK.
Lihat detail peran RAM yang telah dibuat dan catat ARN peran RAM tersebut untuk digunakan selanjutnya.
Langkah 6: Konfigurasikan atribut pengguna yang dikembalikan oleh Shibboleth
Ubah file
/opt/shibboleth/conf/services.xml.File konfigurasi
attribute-resolver.xmlbawaan tidak lengkap. Gantilah denganattribute-resolver-full.xmluntuk menggunakan konfigurasi lengkap.<value>%{idp.home}/conf/attribute-resolver.xml</value> <!-- Temukan kode yang ditampilkan pada baris sebelumnya dalam file dan ganti kode tersebut dengan kode yang ditampilkan pada baris berikut. --> <value>%{idp.home}/conf/attribute-resolver-full.xml</value>Ubah file
/opt/shibboleth/conf/attribute-resolver-full.xml.Dalam file ini, konfigurasikan atribut-atribut yang akan dikembalikan dalam informasi pengguna. Dalam contoh ini, bidang
maildanmemberofdikembalikan.iddari atributmemberofadalahrole, yang merepresentasikan peran pengguna. Nilai tagReturnValueadalah<ARN peran RAM tanpa nama peran (worker) + '$1'>,<ARN SP>. Anda dapat memperoleh<ARN SP>dari Langkah 4: Buat SAML IdP di Alibaba Cloud danARN peran RAMdari Langkah 5: Buat peran RAM di Alibaba Cloud.CatatanNama peran diganti dengan
$1untuk mendukung beberapa peran. Anda dapat mengubah peran pengguna dengan menyesuaikan bidangmemberofdalam informasi pengguna.Atribut
memberofadalah atribut pengguna kustom, bukan atribut internal. Anda dapat menggantinya dengan atribut lain yang menunjukkan peran pengguna.<!-- ========================================== --> <!-- Attribute Definitions --> <!-- ========================================== --> <!-- Schema: Core schema attributes--> <!-- Temukan kode yang ditampilkan pada baris sebelumnya dalam file dan tambahkan kode yang ditampilkan pada baris berikut. --> <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>Dalam file ini, baca informasi konfigurasi dari
/opt/shibboleth/conf/ldap.propertiesuntuk membuat koneksi LDAP.<!-- 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}" ... </DataConnector> --> <!-- Temukan kode yang ditampilkan pada baris sebelumnya dalam file dan ganti kode tersebut dengan kode yang ditampilkan pada baris 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>
Ubah file
/opt/shibboleth/conf/attribute-filter.xmluntuk menambahkan filter atribut.Ganti atribut
valuedalam tagPolicyRequirementRuledenganentityIDAlibaba Cloud yang telah dicatat di Langkah 1: Unduh file metadata SAML SP Alibaba Cloud.<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 yang ditampilkan pada baris sebelumnya dalam file dan tambahkan kode yang ditampilkan pada baris berikut. --> <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 atribut NameID dalam tanggapan SAML
Ubah file
/opt/shibboleth/conf/relying-party.xmluntuk mengonfigurasi NameID untuk Alibaba Cloud.Ganti atribut
relyingPartyIdsdalam tagbeandenganentityIDAlibaba Cloud yang telah dicatat di Langkah 1: Unduh file metadata SAML SP Alibaba Cloud.<!-- 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 ditampilkan pada baris sebelumnya dalam file dan ganti kode tersebut dengan kode yang ditampilkan pada baris 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>Ubah file
/opt/shibboleth/conf/saml-nameid.xmluntuk mengonfigurasi cara pembuatan NameID.<!-- Temukan kode berikut. Hapus komentar kode tersebut agar konfigurasi berlaku.--> <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'} }" />Ubah file
/opt/shibboleth/conf/saml-nameid.propertiesuntuk mengonfigurasi properti NameID.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 Shibboleth
Mulai ulang Apache Tomcat agar konfigurasi sebelumnya berlaku.
Verifikasi hasil
Setelah menyelesaikan konfigurasi di atas, Anda dapat memulai SSO dari Shibboleth.
Akses
https://<alamat server Anda>/idp/profile/SAML2/Unsolicited/SSO?providerId=<entityID>.<entityID>dalam URL adalahentityIDAlibaba Cloud yang telah dicatat di Langkah 1: Unduh file metadata SAML SP Alibaba Cloud.Di halaman logon Shibboleth, masukkan nama pengguna dan kata sandi, lalu klik Log On.
Setelah logon berhasil, Anda akan diarahkan ke halaman utama Konsol Manajemen Alibaba Cloud sebagai peran RAM worker.
FAQ
Jika Anda mengalami masalah selama verifikasi, periksa file /opt/shibboleth-idp/logs/idp-process.log untuk mengidentifikasi penyebabnya. Bagian-bagian berikut menjelaskan masalah umum:
Apa yang harus saya lakukan jika terjadi pengecualian saat menggunakan nama pengguna dan kata sandi yang valid untuk masuk ke Shibboleth?
Periksa pesan kesalahan di /opt/shibboleth-idp/logs/idp-process.log. Jika kesalahan terkait dengan ValidateUsernamePassword, periksa konfigurasi dan penerapan koneksi LDAP. Pastikan Anda telah menghapus komentar dan tidak memasukkan spasi tambahan.
Apa yang harus saya lakukan jika sistem tidak merespons setelah logon dan menampilkan pesan unable to connect to the ldap?
Periksa konfigurasi koneksi LDAP di file ldap.properties dan attribute-resolver-full.xml.
Apa yang harus saya lakukan jika saya diarahkan ke Alibaba Cloud setelah logon dan pesan The NameID is missing ditampilkan?
Verifikasi bahwa bidang mail dipetakan dengan benar sebagai atribut di Langkah 6: Konfigurasikan atribut pengguna yang dikembalikan oleh Shibboleth dan bahwa atribut NameID dikonfigurasi dengan benar di Langkah 7: Konfigurasikan atribut NameID dalam tanggapan SAML.
Apa yang harus saya lakukan jika pesan Unsupported Request ditampilkan saat saya mengakses https://<alamat server Anda>/idp/profile/SAML2/Unsolicited/SSO?providerId=<entityID>?
Verifikasi bahwa entityId dikonfigurasi dengan benar. Nilai entityId harus sama di file metadata dalam folder metadata, file attribute-filter.xml, dan file relying-party.xml.
Apa yang harus saya lakukan jika saya diarahkan ke Alibaba Cloud setelah logon dan pesan Can not find SAML role attribute which is required ditampilkan?
Verifikasi bahwa bidang memberof dalam informasi pengguna dipetakan dengan benar ke role di Langkah 6: Konfigurasikan atribut pengguna yang dikembalikan oleh Shibboleth. Periksa dengan cermat nilai dalam tag ReturnValue.
Apa yang harus saya lakukan jika saya diarahkan ke Alibaba Cloud setelah logon dan pesan Can not find SAML role session name attribute which is required ditampilkan?
Verifikasi bahwa name dari atribut mail adalah https://www.aliyun.com/SAML-Role/Attributes/RoleSessionName di Langkah 6: Konfigurasikan atribut pengguna yang dikembalikan oleh Shibboleth. Beberapa pengguna mungkin lupa mengubah nilai name saat mereka mengubah konfigurasi SSO berbasis pengguna menjadi konfigurasi SSO berbasis peran.
Apa yang harus saya lakukan jika saya diarahkan ke Alibaba Cloud setelah logon dan pesan The response signature is invalid ditampilkan?
Unggah ulang file metadata Shibboleth ke Alibaba Cloud.