日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

使用Shibboleth進行角色SSO的示例

本文提供一個以Shibboleth與阿里云進行角色SSO的示例,幫助您理解企業IdP與阿里云進行角色SSO的端到端配置流程。

準備工作

  1. 安裝Shibboleth、Tomcat和LDAP Server。

  2. 配置LDAP Server。

    為了更好地演示示例,在LDAP中添加一個管理員賬號,DN為uid=admin,ou=system,密碼為secret。

    在LDAP中添加一個測試賬號,DN為cn=Test User,ou=users,dc=wimpi,dc=net,密碼為secret,具體信息如下圖所示。

    image.png

    用戶信息字段:

    • mail:對應阿里云的RAM用戶登錄名稱。

    • memberof:對應于阿里云的RAM角色名稱。

    • samaccountname:用于配置登錄Shibboleth的用戶名。

    • userpassword:登錄的密碼。

  3. 配置Shibboleth連接LDAP Server。

    修改/opt/shibboleth-idp/conf/ldap.properties文件的以下數據:

    # LDAP認證模式
    idp.authn.LDAP.authenticator = bindSearchAuthenticator
    
    # LDAP的地址
    idp.authn.LDAP.ldapURL = ldaps://[LDAP服務地址]:389
    
    # 禁用TSL和SSL
    idp.authn.LDAP.useStartTLS = false
    idp.authn.LDAP.useSSL = false
    
    # 基本搜索目錄
    idp.authn.LDAP.baseDN = dc=wimpi,dc=net
    idp.authn.LDAP.subtreeSearch = true
    # 登錄匹配規則,samaccountname是用戶數據中的字段,用于登錄LDAP。
    idp.authn.LDAP.userFilter= (samaccountname={user})
    
    # admin賬戶和密碼
    idp.authn.LDAP.bindDN = uid=admin,ou=system
    idp.authn.LDAP.bindDNCredential = secret
    
    idp.attribute.resolver.LDAP.searchFilter =(samaccountname=$resolutionContext.principal)
說明

本文中涉及的Shibboleth配置部分屬于建議,僅用于幫助理解阿里云SSO登錄的端到端配置流程,阿里云不提供Shibboleth配置的咨詢服務。

步驟一:在阿里云獲取SAML服務提供商元數據

  1. 使用阿里云賬號登錄RAM控制臺。

  2. 在左側導航欄,選擇集成管理 > SSO管理。

  3. 角色SSO頁簽,單擊SAML頁簽,復制阿里云SAML服務提供商元數據URL。

  4. 在新的瀏覽器窗口中打開復制的鏈接,將元數據XML文件另存到/opt/shibboleth-idp/metadata/aliyun-ram-role-metadata.xml。

    說明

    元數據XML文件保存了阿里云作為一個SAML服務提供商的訪問信息。您需要記錄XML文件中EntityDescriptor元素的entityID屬性值,以便后續在Shibboleth的配置中使用。

步驟二:將阿里云注冊到Shibboleth

配置/opt/shibboleth-idp/conf/metadata-providers.xml,指定步驟一:在阿里云獲取SAML服務提供商元數據獲取的元數據文件,將阿里云注冊到Shibboleth。

<!--
    <MetadataProvider id="LocalMetadata"  xsi:type="FilesystemMetadataProvider" metadataFile="PATH_TO_YOUR_METADATA"/>
-->

<!-- 找到上方注釋代碼,替換為下方代碼 -->

<MetadataProvider id="AliyunMetadata"  xsi:type="FilesystemMetadataProvider" metadataFile="%{idp.home}/metadata/aliyun-ram-role-metadata.xml"/>

步驟三:在Shibboleth獲取SAML IdP元數據

  1. 重啟Tomcat,使前面的配置生效。

  2. 訪問https:///<您的服務器地址>/idp/shibboleth,將元數據文件保存到本地。

步驟四:在阿里云創建SAML身份提供商

  1. 使用阿里云賬號登錄RAM控制臺

  2. 在左側導航欄,選擇集成管理>SSO管理。

  3. 角色SSO頁簽,單擊SAML頁簽,然后單擊創建身份提供商

  4. 創建身份提供商頁面,輸入身份提供商名稱(shibboleth-provider)和備注。

  5. 元數據文檔區域,單擊上傳文件,上傳從步驟三:在Shibboleth獲取SAML IdP元數據獲取的IdP元數據。

  6. 單擊確定

  7. 查看新創建的身份提供商詳情,記錄其ARN,方便您后續使用。

步驟五:在阿里云創建RAM角色

  1. 在RAM控制臺的左側導航欄,選擇身份管理 > 角色

  2. 角色頁面,單擊創建角色。

  3. 創建角色面板,選擇可信實體類型為身份提供商,單擊下一步

  4. 輸入角色名稱(worker)和備注

  5. 選擇身份提供商類型為SAML。

  6. 選擇從步驟四:在阿里云創建SAML身份提供商中創建的身份提供商(shibboleth-provider)并查看限制條件后,單擊完成

  7. 單擊關閉

  8. 查看新創建的RAM角色詳情,記錄其ARN,方便您后續使用。

步驟六:配置Shibboleth返回的用戶屬性

  1. 修改/opt/shibboleth/conf/services.xml。

    原版使用的是attribute-resolver.xml配置文件,包含的配置信息不夠,需要啟動完整版的配置,將其替換為attribute-resolver-full.xml。

    <value>%{idp.home}/conf/attribute-resolver.xml</value>
    <!-- 找到上方代碼,替換為下方代碼 -->
    <value>%{idp.home}/conf/attribute-resolver-full.xml</value>
  2. 修改/opt/shibboleth/conf/attribute-resolver-full.xml。

    1. 在該文件中配置用戶信息中返回的屬性。本示例中選擇mail字段和memberof作為返回屬性。

      其中,memberof屬性的idrole,代表用戶的角色。ReturnValue標簽的值為<角色ARN除了角色名(worker)的部分+'$1'>,<服務提供商ARN>。<服務提供商ARN>步驟四:在阿里云創建SAML身份提供商中獲取,角色ARN步驟五:在阿里云創建RAM角色中獲取。

      說明

      角色名使用$1代替是為了適配多個角色身份,可以通過調整用戶信息中的memberof字段調整用戶的角色。

      注意該memberof屬性是自行添加的用戶屬性,非內部屬性。您也可以修改為其他能表明用戶角色的屬性值。

      <!-- ========================================== -->
      <!--      Attribute Definitions                 -->
      <!-- ========================================== -->
      
      <!-- Schema: Core schema attributes-->
      
      <!-- 找到上方注釋代碼,在后面加入下方代碼 -->
      
      <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. 在該文件中讀取/opt/shibboleth/conf/ldap.properties中配置的信息,進行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>
      -->
      
      <!-- 找到上方示例代碼,將其替換為下方代碼 -->
      
      <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. 修改/opt/shibboleth/conf/attribute-filter.xml,添加屬性過濾器。

    PolicyRequirementRule標簽中的value屬性替換為步驟一:在阿里云獲取SAML服務提供商元數據中的阿里云entityID。

    <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">
    	
    <!-- 找到上方代碼,在后面加入下方代碼 -->
    	
    <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>

步驟七:配置SAML響應的NameID

  1. 修改/opt/shibboleth/conf/relying-party.xml,為阿里云建立NameID的配置。

    bean標簽中的relyingPartyIds屬性替換為步驟一:在阿里云獲取SAML服務提供商元數據中的阿里云entityID。

    <!--
    	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>
    -->
    
    <!-- 找到上方注釋代碼,替換為下方代碼 -->
    
    <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. 修改/opt/shibboleth/conf/saml-nameid.xml,配置NameID的生成方式。

    <!-- 找到下方兩處代碼,將其注釋取消,使之生效 -->
    
    <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. 修改/opt/shibboleth/conf/saml-nameid.properties,配置NameID的相關屬性。

    idp.nameid.saml2.default = urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
    idp.persistentId.useUnfilteredAttributes = true
    idp.persistentId.encoding = BASE32

步驟八:啟動Shibboleth

重啟Tomcat,使前面的配置生效。

結果驗證

完成上述配置后,您可以從Shibboleth發起SSO登錄。

  1. 訪問https://<您的服務器地址>/idp/profile/SAML2/Unsolicited/SSO?providerId=<entityID>。

    鏈接中的<entityID>步驟一:在阿里云獲取SAML服務提供商元數據中的阿里云entityID。

  2. 在Shibboleth的登錄界面,輸入用戶名和密碼,單擊登錄。

    系統將自動進行SSO登錄,以角色(worker)身份登錄到阿里云控制臺首頁。

常見問題

結果驗證時如果遇到問題,您可以查看/opt/shibboleth-idp/logs/idp-process.log,通過日志分析問題原因。常見問題如下:

Shibboleth用戶名密碼正確,但是登錄后提示異常。

查看/opt/shibboleth-idp/logs/idp-process.log中的報錯信息,如果是與ValidateUsernamePassword錯誤有關,則重點檢查IDAP的連接配置和部署情況,重點查看是否將注釋去除,且不能輸入多余空格。

登錄后無響應,提示unable to connect to the ldap。

檢查ldap.propertiesattribute-resolver-full.xml文件中IDAP連接的相關配置。

登錄后轉跳阿里云,提示The NameID is missing

檢查步驟六:配置Shibboleth返回的用戶屬性中是否正確將用戶信息中的mail映射為屬性,檢查步驟七:配置SAML響應的NameIDNameID配置是否正確。

訪問https://<您的服務器地址>/idp/profile/SAML2/Unsolicited/SSO?providerId=<entityID>時提示Unsupported Request

檢查entityId是否配置正確。metadata文件夾下的元數據、attribute-filter.xmlrelying-party.xml三處中的entityId必須保持一致。

登錄后轉跳阿里云,提示Can not find SAML role attribute which is required。

檢查步驟六:配置Shibboleth返回的用戶屬性中是否正確將用戶信息中的memberof映射成role,仔細校對ReturnValue標簽中的值。

登錄后轉跳阿里云,提示Can not find SAML role session name attribute which is required。

檢查步驟六:配置Shibboleth返回的用戶屬性mail屬性的name是否為https://www.aliyun.com/SAML-Role/Attributes/RoleSessionName。部分用戶可能在嘗試用戶SSO后直接在原配置上修改為角色SSO,容易忘記修改name的值。

登錄后轉跳阿里云,提示The response signature is invalid

重新將Shibboleth的元數據文件上傳到阿里云。