IdP2接入CARSI说明

本文档介绍如何在 IdP2 版本下修改配置接入 CARSI。注意 Shibboleth 已经停止对 IdP2 的维护和支持,新部署 IdP 的用户请选择直接部署 IdP3 版本。本文档供已有 IdP2 在其他 Shibboleth 联盟内使用,尚未升级 IdP3 之前,接入 carsi 的方案。

我们仍然建议尽快升级您的 IdP 到 IdP3。

增加 Metadata 源

Shibboleth 联盟本质上是一个点对点的互相信任关系。IdP 允许配置多个 metadataprovider,所以 IdP 只需要引入 对应联盟的 metadata ,就可以同时支持在多个联盟内进行联盟认证。修改 relying-party.xml 配置。增加额外的 metadata 获取配置。

<metadata:MetadataProvider id="CARSIMD" xsi:type="metadata:FileBackedHTTPMetadataProvider" 
metadataURL="https://www.carsi.edu.cn/carsimetadata/carsifed-metadata.xml" backingFile="/opt/idp/metadata/carsi.xml"/>

由于 IdP2 部署较早,如果操作系统的 openssl 版本较低,可能会有 SSL 握手失败的问题,如下所示:

2019-07-10 01:08:29,537 - ERROR [org.opensaml.saml2.metadata.provider.HTTPMetadataProvider:273] - Error retrieving metadata from https://www.carsi.edu.cn/carsimetadata/carsifed-metadata.xml| javax.net.ssl.SSLException: SSLSession was invalid: Likely implicit handshake failure: Set system property javax.net.debug=all for details

我们可以人工的去下载 metadata,然后以 Filesystem 的方式加载
         <metadata:MetadataProvider id="CARSIMD" xsi:type="metadata:FilesystemMetadataProvider"
                          metadataFile="/opt/idp/metadata/carsi.xml"
                          maxRefreshDelay="P1D" />


同时,做一个系统的定时任务去定时更新 metadata 就好了

15 5 * * * wget --no-check-certificate https://www.carsi.edu.cn/carsimetadata/carsifed-metadata.xml -O /opt/idp/metadata/carsi.xml

属性释放

增加属性获取

修改 attribute-resolver.xml 配置,增加 carsi 所需的属性获取。此处与 IdP3 基本一致。

eduPersonPrincipalName 和 eduPersonScopedAffiliation

    <resolver:AttributeDefinition xsi:type="ad:Scoped" id="eduPersonPrincipalName" scope="xxx.edu.cn" sourceAttributeID="usertype">
        <resolver:Dependency ref="myldap" />
        <resolver:AttributeEncoder xsi:type="enc:SAML1ScopedString" name="urn:mace:dir:attribute-def:eduPersonPrincipalName" />
        <resolver:AttributeEncoder xsi:type="enc:SAML2ScopedString" name="urn:oid:1.3.6.1.4.1.5923.1.1.1.6" friendlyName="eduPersonPrincipalName" />
    </resolver:AttributeDefinition>
    <resolver:AttributeDefinition id="eduPersonScopedAffiliation" xsi:type="ad:Scoped" scope="example.edu.cn" sourceAttributeID="eduPersonScopedAffiliation">
        <resolver:Dependency ref="myldap" />
        <resolver:AttributeEncoder xsi:type="enc:SAML1ScopedString" name="urn:mace:dir:attribute-def:eduPersonScopedAffiliation" />
        <resolver:AttributeEncoder xsi:type="enc:SAML2ScopedString" name="urn:oid:1.3.6.1.4.1.5923.1.1.1.9" friendlyName="eduPersonScopedAffiliation" />
    </resolver:AttributeDefinition>

eduPersonEntitlement

先增加一条静态属性

        <resolver:DataConnector id="staticAttributes" xsi:type="dc:Static">
                <dc:Attribute id="domainName">
                        <dc:Value>xxx.edu.cn</dc:Value>
                </dc:Attribute>
                <dc:Attribute id="eduPersonEntitlement">
                        <dc:Value>urn:mace:dir:entitlement:common-lib-terms</dc:Value>
                </dc:Attribute>
        </resolver:DataConnector>

再配置释放

    <resolver:AttributeDefinition xsi:type="ad:Simple" id="eduPersonEntitlement" sourceAttributeID="eduPersonEntitlement">
        <resolver:Dependency ref="staticAttributes" />
        <resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:eduPersonEntitlement" />
        <resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:1.3.6.1.4.1.5923.1.1.1.7" friendlyName="eduPersonEntitlement" />
    </resolver:AttributeDefinition>

eduPersonTargetedID

先配置 coumptID,sourceAttributeID="uid" 和 ref="myldap" 表示根据 myldap 连接器中的 uid 属性进行计算.salt 注意要超过 16 位.

    <resolver:DataConnector xsi:type="dc:ComputedId"
                            id="computedID"
                            generatedAttributeID="computedID"
                            sourceAttributeID="uid"
                            salt="xxxx">
        <resolver:Dependency ref="myldap" />
    </resolver:DataConnector>

再配置属性释放

    <resolver:AttributeDefinition xsi:type="ad:SAML2NameID" id="eduPersonTargetedID" 
                                  nameIdFormat="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" sourceAttributeID="computedID">
        <resolver:Dependency ref="computedID" />
        <resolver:AttributeEncoder xsi:type="enc:SAML1XMLObject" name="urn:oid:1.3.6.1.4.1.5923.1.1.1.10" />
        <resolver:AttributeEncoder xsi:type="enc:SAML2XMLObject" name="urn:oid:1.3.6.1.4.1.5923.1.1.1.10" friendlyName="eduPersonTargetedID" />
    </resolver:AttributeDefinition>

允许属性释放

修改 attribute-filter.xml,增加新增属性的过滤配置,允许释放。

        </afp:AttributeRule>
        <afp:AttributeRule attributeID="eduPersonScopedAffiliation">
                <afp:PermitValueRule xsi:type="basic:ANY"/>
        </afp:AttributeRule>
        <afp:AttributeRule attributeID="eduPersonEntitlement">
                <afp:PermitValueRule xsi:type="basic:ANY"/>
        </afp:AttributeRule>
        <afp:AttributeRule attributeID="eduPersonTargetedID">
                <afp:PermitValueRule xsi:type="basic:ANY"/>
        </afp:AttributeRule>


适配 scope 域名

修改 idp-metadata.xml,修改 scope 部分的域名与您学校的域名适配。否则带 scope 的属性会被 sp 过滤掉。

        <Extensions>
            <shibmd:Scope regexp="false">xxx.edu.cn</shibmd:Scope>
        </Extensions>

重启 IdP

根据 IdP 的部署模式,重启您的 java 容器,通常是 tomcat。确认 IdP 日志正常没有报错。

提交 Metadata

将 IdP 的 metadata 提交给 carsi,并在 carsi 的 sp 上测试。如果一切顺利,恭喜你已经完成了 carsi 的接入。


记得要筹划 IdP3 的升级哦。

版权所有©北京大学计算中心