All Products
Search
Document Center

Resource Access Management:Konfigurasikan SSO berbasis peran dengan Shibboleth

Last Updated:Jun 05, 2026

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

  1. Instal Shibboleth, Tomcat, dan server Lightweight Directory Access Protocol (LDAP).

  2. Konfigurasikan server LDAP.

    Untuk contoh ini, tambahkan akun administrator ke LDAP dengan distinguished name (DN) uid=admin,ou=system dan password secret.

    Tambahkan akun uji coba ke LDAP dengan DN cn=Test User,ou=users,dc=wimpi,dc=net dan password secret. Detail akun ditampilkan pada gambar berikut.

    image.png

    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.

  3. 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)
Catatan

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

  1. Login ke Konsol RAM sebagai administrator RAM.

  2. Di panel navigasi sebelah kiri, pilih Integrations > SSO.

  3. Di tab Role-based SSO, klik tab SAML dan salin URL metadata service provider SAML Alibaba Cloud.

  4. Buka tautan yang disalin di jendela browser baru dan simpan file metadata sebagai /opt/shibboleth-idp/metadata/aliyun-ram-role-metadata.xml.

    Catatan

    Catat nilai atribut entityID dari elemen EntityDescriptor. 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

  1. Mulai ulang Tomcat untuk menerapkan perubahan Anda.

  2. Akses https://<alamat server Anda>/idp/shibboleth dan simpan file metadata ke mesin lokal Anda.

Langkah 4: Buat penyedia identitas SAML

  1. Login ke Konsol RAM menggunakan Akun Alibaba Cloud Anda.

  2. Di panel navigasi sebelah kiri, pilih Integrations > SSO.

  3. Di tab Role-based SSO, klik tab SAML, lalu klik Create IdP.

  4. Di halaman Create IdP, masukkan IdP Name (shibboleth-provider) dan Note.

  5. Di bagian Metadata File, klik Upload Metadata File dan unggah metadata IdP dari Langkah 3: Dapatkan metadata IdP SAML.

  6. Klik Create IdP.

Catat ARN penyedia identitas baru untuk langkah selanjutnya.

Langkah 5: Buat peran RAM

  1. Di panel navigasi sebelah kiri Konsol RAM, pilih Identities > Roles.

  2. Di halaman Roles, klik Create Role.

  3. Di pojok kanan atas halaman Create Role, klik Switch to Policy Editor.

  4. 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.

  5. Di editor, atur kondisi saml:recipient ke https://signin.alibabacloud.com/saml-role/sso.

  6. 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

  1. Ubah file /opt/shibboleth/conf/services.xml.

    attribute-resolver.xml bawaan tidak memiliki pengaturan yang diperlukan. Ganti dengan attribute-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>
  2. Ubah file /opt/shibboleth/conf/attribute-resolver-full.xml.

    1. Konfigurasikan Shibboleth untuk mengembalikan atribut pengguna mail dan memberof.

      id dari atribut memberof adalah role, yang merepresentasikan peran pengguna. ReturnValue adalah <bagian dari ARN peran tanpa nama peran (worker)>+'$1',<ARN service provider>. Dapatkan <ARN service provider> dari Langkah 4: Buat penyedia identitas SAML dan ARN peran dari Langkah 5: Buat peran RAM.

      Catatan

      Nama peran diganti dengan $1 untuk mendukung beberapa peran. Ubah peran pengguna dengan menyesuaikan bidang memberof dalam informasi pengguna.

      memberof adalah 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>
    2. 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>
  3. Tambahkan filter atribut di /opt/shibboleth/conf/attribute-filter.xml.

    Atur value dalam tag PolicyRequirementRule ke entityID Alibaba 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

  1. Konfigurasikan NameID untuk Alibaba Cloud di /opt/shibboleth/conf/relying-party.xml.

    Atur relyingPartyIds dalam tag bean ke entityID Alibaba 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>
  2. 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'} }" />
  3. 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.

  1. Akses https://<alamat server Anda>/idp/profile/SAML2/Unsolicited/SSO?providerId=<entityID>.

    Dalam URL tersebut, <entityID> adalah entityID Alibaba Cloud dari Langkah 1: Dapatkan metadata service provider SAML.

  2. 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.