SSO场景系列:实现Shibboleth+Ldap到阿里云的单点登录

简介: Shibboleth简介 Shibboleth是一个基于标准的,实现组织内部或跨组织的网页单点登录的开源软件包。它允许站点为处于私有保护方式下的受保护的在线资源做出被通知的认证决定。 Shibboleth软件工具广泛使用联合的身份标准,主要是OASIS安全声称标记语言(SAML),来提供一个联合单点登录和属性交换框架。

Shibboleth简介

Shibboleth是一个基于标准的,实现组织内部或跨组织的网页单点登录的开源软件包。它允许站点为处于私有保护方式下的受保护的在线资源做出被通知的认证决定。

Shibboleth软件工具广泛使用联合的身份标准,主要是OASIS安全声称标记语言(SAML),来提供一个联合单点登录和属性交换框架。一个用户用他的组织的证书认证,组织(或IdP)传送最少的必要的身份信息给SP实现认证决定。Shibboleth也提供扩展的隐私功能,允许一个用户和他们的主站点来控制释放给每一个应用的属性。

Shibboleth项目作为一个Internet2中间件活动启动于2000年,这年晚些时候该项目和OASIS SAML工作组的工作相联系。Shibboleth1.0 于2003年发布,并快速被全世界的研究和教育机构使用。随着2005年SAML2.0的发布,2006年Shibboleth2.0也发布,SAML标准升级到包含所有的多边,由Shibboleth首创的元数据驱动方法。

Shibboleth作为开源软件开发,在Apache 软件许可证下发布。关于个别部件的更多信息可以在产品页面看到。

配置 Shibboleth

可将 Shibboleth 配置为 阿里云 中企业登录的身份提供者 (IDP)。配置过程包含两个主要步骤:将企业级 IDP 注册到 阿里云,以及将 阿里云 注册到企业级 IDP。

前提条件

当以Shibboleth 配置为阿里云中企业登录的身份提供者(IDP)时,登陆者身份需要在阿里云存在,例如如果以abc@testdomain.com身份登录,那么在阿里云上必须绑定testdomain.com的域名并验证,并且存在abc这个用户。

阿里云需要的信息

当用户使用企业登录帐户进行登录时,阿里云 需要从 IDP 处接收某些属性信息。NameID 属性为强制属性,并且必须由您的 IDP 在 SAML 响应中发送,才能使 阿里云 的联合身份验证起作用。由于 阿里云 使用 NameID 的值唯一标识指定用户,因此建议使用常量值来唯一标识用户。

注册Shibboleth为阿里云IDP

将%{idp.home}/metadata/idp-metadata.xml上传到阿里云。操作步骤:进入RAM控制台,选择人员管理 -> 设置-> 高级设置 -> SSO登录设置,在“编辑SSO登录设置”中上传idp-metadata.xml文件,并开启SSO登录。

将阿里云注册到Shibboleth

1.将阿里云配置为Shibboleth的依赖方:

配置metadata-providers.xml

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

先下载阿里云账号的SP Metadata XML文档:进入RAM控制台 > 人员管理 > 设置 > 高级设置,在SSO 登录设置下可以查看当前云账号的SAML 服务提供方元数据 URL。从该URL下载内容并保存为aliyun-metadata.xml,并拷贝到%{idp.home}/metadata/aliyun-metadata.xml。

2.配置用户身份验证

idp.authn.LDAP.authenticator = bindSearchAuthenticator

idp.authn.LDAP.ldapURL = ldaps://myldap.example.org:port

idp.authn.LDAP.baseDN = dc=example,dc=org
idp.authn.LDAP.subtreeSearch = true

idp.authn.LDAP.userFilter= (sAMAccountName={user})
idp.attribute.resolver.LDAP.searchFilter =(sAMAccountName=$resolutionContext.principal)
idp.authn.LDAP.bindDN = cn=readonlyuser,cn=Users,dc=example,dc=org

idp.authn.LDAP.bindDNCredential = userpassword

3.配置将由Shibboleth返回的用户属性
a)

vim /opt/shibboleth/conf/services.xml
把
<value>%{idp.home}/conf/attribute-resolver.xml</value>
修改为
<value>%{idp.home}/conf/attribute-resolver-full.xml</value>

b)attribute-resolver-full.xml
增加ldap解析NameID映射过来的属性,例如以mail为NameID则增加属性

<AttributeDefinition xsi:type="Simple" id="mail" sourceAttributeID="userPrincipalName">
        <Dependency ref="myLDAP" />
        <AttributeEncoder xsi:type="SAML1String" name="urn:mace:dir:attribute-def:mail" encodeType="false" />
        <AttributeEncoder xsi:type="SAML2String" name="urn:oid:0.9.2342.19200300.100.1.3" friendlyName="mail" encodeType="false" />
    </AttributeDefinition>

修改开启ldapConnector并将StartTls证书配置关掉

 <!-- 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}"
        connectTimeout="%{idp.attribute.resolver.LDAP.connectTimeout}"
        responseTimeout="%{idp.attribute.resolver.LDAP.responseTimeout}">
        <FilterTemplate>
            <![CDATA[
                %{idp.attribute.resolver.LDAP.searchFilter}
            ]]>
        </FilterTemplate>
        <!--
        <StartTLSTrustCredential id="LDAPtoIdPCredential" xsi:type="sec:X509ResourceBacked">
            <sec:Certificate>%{idp.attribute.resolver.LDAP.trustCertificates}</sec:Certificate>
        </StartTLSTrustCredential>
        -->
    </DataConnector>

c)attribute-filter.xml
增加属性过滤器

其中<account-id>换成你的云账号id
<AttributeFilterPolicy id="aliyun">
        <PolicyRequirementRule xsi:type="Requester" value="https://signin.aliyun.com/<account-id>/saml/SSO" />
                    <AttributeRule attributeID="mail">
                <PermitValueRule xsi:type="ANY" />
            </AttributeRule>
            <AttributeRule attributeID="givenName">
                <PermitValueRule xsi:type="ANY" />
            </AttributeRule>
        </AttributeFilterPolicy>

4.修改relying-party.xml

其中<account-id>换成你的云账号id
<util:list id="shibboleth.RelyingPartyOverrides">
       <!--Add Aliyun RelyintParty -->
       <bean parent="RelyingPartyByName" c:relyingPartyIds="https://signin.aliyun.com/<account-id>/saml/SSO">
           <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>
       <!--Add Done -->
</util:list>

5.修改saml-nameid.xml
配置NameID产生的方式

  <util:list id="shibboleth.SAML2NameIDGenerators">      
        <bean parent="shibboleth.SAML2AttributeSourcedGenerator"
            p:omitQualifiers="true"
            p:format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"
            p:attributeSourceIds="#{ {'mail'} }" />           
    </util:list>

    <!-- SAML 1 NameIdentifier Generation -->
    <util:list id="shibboleth.SAML1NameIdentifierGenerators">                                                                                                               
        <bean parent="shibboleth.SAML1AttributeSourcedGenerator"
            p:omitQualifiers="true"
            p:format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"
            p:attributeSourceIds="#{ {'mail'} }" />
                    
    </util:list>

6.修改saml-nameid.properties文件

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

7.重新启动 Shibboleth后台程序(Linux)或者(Windows)服务

小结

到此 我们完成了Shibboleth到阿里云的打通过程,效果如下
a1.png
a2.png
a3.png

目录
相关文章
|
15天前
|
运维 监控 搜索推荐
客户案例 | 阿里云向量检索 Milvus 版在识货电商检索场景的应用与实践
本文分享了阿里云向量检索 Milvus 版在识货电商检索场景的应用与实践。阿里云的 Milvus 服务以其性能稳定和功能多样化的向量检索能力,为识货团队在电商领域的向量检索场景中搭建业务系统提供了强有力的支持。
|
1月前
|
编解码 缓存 安全
阿里云目前活动内各云服务器实例规格适用场景与价格参考
目前阿里云的活动中,云服务器有多种不同实例规格可选,实例规格定义了实例的基本属性:CPU和内存(包括CPU型号、主频等),但是不同实例规格所适用的场景是不一样的,价格也有很大差别,有的用户初次选购阿里云服务器可能并不知道这些实例规格的具体适用场景,下面是小编整理汇总的2024年截止目前阿里云的活动中云服务器实例规格适用场景与活动价格,以供参考。
阿里云目前活动内各云服务器实例规格适用场景与价格参考
|
1月前
|
存储 缓存 安全
阿里云服务器实例规格选型参考,根据上云场景选择适合自己的实例规格
对于很多新手用户来说,在初次选择阿里云服务器实例规格的时候,面对众多实例规格往往不知道如何选择,因为云服务器实例规格不同,价格也不一样,本文通过一些常见的选型场景推荐,便于大家在选择云服务器实例规格时做个参考。
阿里云服务器实例规格选型参考,根据上云场景选择适合自己的实例规格
|
1月前
|
存储 监控 Apache
查询提速11倍、资源节省70%,阿里云数据库内核版 Apache Doris 在网易日志和时序场景的实践
网易的灵犀办公和云信利用 Apache Doris 改进了大规模日志和时序数据处理,取代了 Elasticsearch 和 InfluxDB。Doris 实现了更低的服务器资源消耗和更高的查询性能,相比 Elasticsearch,查询速度提升至少 11 倍,存储资源节省达 70%。Doris 的列式存储、高压缩比和倒排索引等功能,优化了日志和时序数据的存储与分析,降低了存储成本并提高了查询效率。在灵犀办公和云信的实际应用中,Doris 显示出显著的性能优势,成功应对了数据增长带来的挑战。
查询提速11倍、资源节省70%,阿里云数据库内核版 Apache Doris 在网易日志和时序场景的实践
|
29天前
|
存储 机器学习/深度学习 弹性计算
【阿里云弹性计算】阿里云ECS实例选择指南:理解不同实例系列的适用场景
【5月更文挑战第24天】阿里云ECS实例系列包括计算优化型、内存优化型、存储优化型、GPU加速型和通用型,适用于不同场景。计算优化型适合计算密集型任务,内存优化型适用于内存数据库,存储优化型针对高I/O需求,GPU加速型用于图形处理和深度学习,通用型则平衡各类需求。选择时需考虑应用类型、性能需求、成本效益和可扩展性。提供的示例代码展示了如何使用阿里云CLI创建通用型实例。本文旨在帮助用户根据业务需求选择最适合的ECS实例。
61 1
|
24天前
|
存储 固态存储 安全
阿里云4核CPU云服务器价格参考,最新收费标准和活动价格
阿里云4核CPU云服务器多少钱?阿里云服务器核数是指虚拟出来的CPU处理器的核心数量,准确来讲应该是vCPU。CPU核心数的大小代表了云服务器的运算能力,CPU越高,云服务器的性能越好。阿里云服务器1核CPU就是一个超线程,2核CPU2个超线程,4核CPU4个超线程,这样云服务器可以同时处理多个任务,计算性能更强。如果网站流程较小,少量图片展示的企业网站,建议选择2核及以上CPU;如果网站流量较大,动态页面比较多,有视频等,建议选择4核、8核以上CPU。
阿里云4核CPU云服务器价格参考,最新收费标准和活动价格
|
21天前
|
存储 固态存储 安全
租用阿里云企业级云服务器最新收费标准与活动价格参考
租用阿里云企业级云服务器多少钱?阿里云服务器有多种实例分类,其中通用型、计算型、内存型、通用算力型、大数据型、本地SSD、高主频型和增强型均属于企业级云服务器,目前在阿里云的活动中,通用型、计算型、内存型和通用算力型均有优惠,下面是阿里云企业级云服务器价格表,包含最新收费标准与活动价格,以表格形式展示给大家,以供参考和了解。
租用阿里云企业级云服务器最新收费标准与活动价格参考
|
5天前
|
弹性计算
2024年阿里云免费云服务器及学生三百通用额度申请教程参考
阿里云2024年继续提供免费学生云服务器,最长可享7个月(1+6个月);还有300元无门槛抵用金,适用于全量公共云产品(特殊商品除外)。学生需完成身份认证和任务以领取和续费。此外,有3个月免费的飞天试用云服务器,分为个人和企业版。详细申请教程包括学生认证、试用产品选择等步骤,可访问指定阿里云链接进行操作。
136 2
|
5天前
|
SQL 弹性计算 API
云服务器 ECS产品使用问题之如何通过API调用阿里云服务器上SQL Server数据库中的数据
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。

热门文章

最新文章