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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 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 软件许可证下发布。关于个别部件的更多信息可以在产品页面看到。

JAAS简介

Java Authentication Authorization Service(JAAS,Java验证和授权API)提供了灵活和可伸缩的机制来保证客户端或服务器端的Java程序。Java早期的安全框架强调的是通过验证代码的来源和作者,保护用户避免受到下载下来的代码的攻击。JAAS强调的是通过验证谁在运行代码以及他/她的权限来保护系统免受用户的攻击。它让你能够将一些标准的安全机制,例如Solaris NIS(网络信息服务)、Windows NT、LDAP(轻量目录存取协议),Kerberos等通过一种通用的,可配置的方式集成到系统当中去。

配置 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上传到阿里云
企业控制台->人员目录->目录设置->SSO设置

将阿里云注册到Shibboleth

1.将阿里云配置为Shibboleth的依赖方
a)配置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。
b)将%{idp.home}/metadata/idp-metadata.xml上传到阿里云
RAM控制台 > 人员管理 > 设置 > 高级设置 > SSO 登录设置
2.配置JAAS(JAAS 是 Java Authentication Authorization Service)
一个jaas实现的demo为https://github.com/tauceti2/jaas-rdbms
编译后将tagishauth.jar拷贝到{%CATALINA_HOME}/lib/目录下
编辑password_authn_config.xml修改代码片段为

 <import resource="jaas-authn-config.xml" />
    <!-- <import resource="krb5-authn-config.xml" /> -->
    <!-- <import resource="ldap-authn-config.xml" /> -->

修改jaas.config为

ShibUserPassAuth {
    /*
    com.sun.security.auth.module.Krb5LoginModule required;
    */
    com.tagish.auth.DBLogin required debug=true 
    dbDriver="com.mysql.jdbc.Driver" 
    dbURL="jdbc:mysql://{host}:{port}/{db_name}" 
    dbUser="{dbuser}" 
    dbPassword="{dbpassword}" 
    userTable="{usertableName}" 
    userColumn="{userColumn}" 
    passColumn="{passColumn}";
};

注:请将{host} {port} 等信息修改为正确的数据库配置

配置好了jaas即可以完成shibboleth的认证过程,上述例子提供一个jaas的demo,如需要定制实现请详细了解jaas的原理并提供相应的LoginModule打包成jar包,并修改相应的jaas.config配置

3.配置将由Shibboleth返回的用户属性
a)下载需要的lib
下载commons-dbcp-1.4.jar,commons-pool-1.6.jar,mysql-connector-java-5.1.45-bin.jar并拷贝到 ${CATALINA_HOME}/lib目录下
增加返回属性的数据源
b)global.xml

    <bean id="MyDataSource" class="org.apache.commons.dbcp.BasicDataSource"
        p:driverClassName="com.mysql.jdbc.Driver"
        p:url="jdbc:mysql://{host}:{port}/{dbname}?autoReconnect=true"
        p:username="{username}"
        p:password="{password}"
        p:testOnBorrow="true"
        p:validationQuery="select 1"
        p:validationQueryTimeout="5" />

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

    <AttributeDefinition xsi:type="Simple" id="mail" sourceAttributeID="mail">
        <Dependency ref="myDatabase" />
        <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>
<DataConnector id="myDatabase" xsi:type="RelationalDatabase">
    <BeanManagedConnection>MyDataSource</BeanManagedConnection>
  
    <QueryTemplate>
       <![CDATA[
         SELECT * FROM {usertable} WHERE {username}='$resolutionContext.principal'
       ]]>
</QueryTemplate>

   <Column columnName="{email}" attributeID="mail" />
</DataConnector>

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

<AttributeFilterPolicy id="aliyun">
        <PolicyRequirementRule xsi:type="Requester" value="https://signin.aliyun.com/saml/SSO" />
            <AttributeRule attributeID="<NameID Attribute>">
                <PermitValueRule xsi:type="ANY" />
            </AttributeRule>
            <AttributeRule attributeID="givenName">
                <PermitValueRule xsi:type="ANY" />
            </AttributeRule>
            <AttributeRule attributeID="mail">
                <PermitValueRule xsi:type="ANY" />
            </AttributeRule>
        </AttributeFilterPolicy>
</AttributeFilterPolicy>

4.修改relaying-party.xml

 <util:list id="shibboleth.RelyingPartyOverrides">
       <!--增加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>
       <!--增加结束 -->
</util:list>

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

   <!-- SAML 2 NameID Generation -->
    <util:list id="shibboleth.SAML2NameIDGenerators">
        <bean parent="shibboleth.SAML2AttributeSourcedGenerator"
            p:format="urn:oasis:names:tc:SAML:2.0:nameid-format:unspecified"
            p:attributeSourceIds="#{ {'your-name-id-attribute'} }" />
    </util:list>

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

小结

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

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
安全 关系型数据库 MySQL
MySQL数据库高效秘籍:10个小技巧,让你轻松应对各种场景!
【8月更文挑战第25天】本文介绍了十个提升MySQL数据库效率与安全性的实用技巧。涵盖查询性能分析、索引优化、慢查询日志利用、图形化工具如MySQL Workbench的应用、性能分析工具、主从复制实现、备份与恢复策略、数据库迁移方法及安全性保障等多个方面。通过具体的示例代码展示每个技巧的实际操作方式,帮助读者深入理解并有效运用MySQL数据库。
72 0
|
2月前
|
存储 关系型数据库 MySQL
MySQL——数据库备份上传到阿里云OSS存储
MySQL——数据库备份上传到阿里云OSS存储
92 0
|
3月前
|
人工智能 关系型数据库 MySQL
基于阿里云的PolarDB MySQL版实现AI增强数据管理
本文将介绍如何利用阿里云的PolarDB MySQL版结合AI技术,实现数据管理的自动化和智能化。
204 0
|
19天前
|
存储 SQL 关系型数据库
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
MySQL如何进行分库分表、数据迁移?从相关概念、使用场景、拆分方式、分表字段选择、数据一致性校验等角度阐述MySQL数据库的分库分表方案。
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
|
3月前
|
缓存 运维 关系型数据库
数据库容灾 | MySQL MGR与阿里云PolarDB-X Paxos的深度对比
经过深入的技术剖析与性能对比,PolarDB-X DN凭借其自研的X-Paxos协议和一系列优化设计,在性能、正确性、可用性及资源开销等方面展现出对MySQL MGR的多项优势,但MGR在MySQL生态体系内也占据重要地位,但需要考虑备库宕机抖动、跨机房容灾性能波动、稳定性等各种情况,因此如果想用好MGR,必须配备专业的技术和运维团队的支持。 在面对大规模、高并发、高可用性需求时,PolarDB-X存储引擎以其独特的技术优势和优异的性能表现,相比于MGR在开箱即用的场景下,PolarDB-X基于DN的集中式(标准版)在功能和性能都做到了很好的平衡,成为了极具竞争力的数据库解决方案。
|
2月前
|
关系型数据库 MySQL 网络安全
阿里云安装Mysql
阿里云安装Mysql
120 1
|
3月前
|
SQL 关系型数据库 MySQL
(八)MySQL锁机制:高并发场景下该如何保证数据读写的安全性?
锁!这个词汇在编程中出现的次数尤为频繁,几乎主流的编程语言都会具备完善的锁机制,在数据库中也并不例外,为什么呢?这里牵扯到一个关键词:高并发,由于现在的计算机领域几乎都是多核机器,因此再编写单线程的应用自然无法将机器性能发挥到最大,想要让程序的并发性越高,多线程技术自然就呼之欲出,多线程技术一方面能充分压榨CPU资源,另一方面也能提升程序的并发支持性。
216 3
|
3月前
|
关系型数据库 MySQL Serverless
体验阿里云PolarDB MySQL Serverless集群
体验阿里云PolarDB MySQL Serverless集群
|
2月前
|
SQL 关系型数据库 MySQL
(十六)MySQL调优篇:单机数据库如何在高并发场景下健步如飞?
在当前的IT开发行业中,系统访问量日涨、并发暴增、线上瓶颈等各种性能问题纷涌而至,性能优化成为了现时代中一个炙手可热的名词,无论是在开发、面试过程中,性能优化都是一个常谈常新的话题。而MySQL作为整个系统的后方大本营,由于是基于磁盘的原因,性能瓶颈往往也会随着流量增大而凸显出来。
154 0
|
3月前
|
人工智能 关系型数据库 MySQL
探索和体验云原生数据库PolarDB MySQL版在AI场景中的应用
探索和体验云原生数据库PolarDB MySQL版在AI场景中的应用
161 0
下一篇
无影云桌面