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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 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

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
SQL 关系型数据库 MySQL
阿里云MySQL数据库价格、购买、创建账号密码和连接数据库教程
阿里云数据库使用指南:购买MySQL、SQL Server等RDS实例,选择配置和地区,完成支付。创建数据库和账号,设置权限。通过DMS登录数据库,使用账号密码访问。同地域VPC内的ECS需将IP加入白名单以实现内网连接。参考链接提供详细步骤。
380 3
|
1天前
|
存储 监控 Apache
查询提速11倍、资源节省70%,阿里云数据库内核版 Apache Doris 在网易日志和时序场景的实践
网易的灵犀办公和云信利用 Apache Doris 改进了大规模日志和时序数据处理,取代了 Elasticsearch 和 InfluxDB。Doris 实现了更低的服务器资源消耗和更高的查询性能,相比 Elasticsearch,查询速度提升至少 11 倍,存储资源节省达 70%。Doris 的列式存储、高压缩比和倒排索引等功能,优化了日志和时序数据的存储与分析,降低了存储成本并提高了查询效率。在灵犀办公和云信的实际应用中,Doris 显示出显著的性能优势,成功应对了数据增长带来的挑战。
查询提速11倍、资源节省70%,阿里云数据库内核版 Apache Doris 在网易日志和时序场景的实践
|
19天前
|
存储 机器学习/深度学习 网络协议
阿里云企业级ARM计算规格族特点、适用场景及收费标准与活动价格参考
阿里云企业级ARM计算规格族是阿里云继X86计算、异构计算、弹性裸金屈服务器、超级计算集群之后推出的全新架构云服务器,ARM计算规格族有通用型实例规格族g8y、计算型实例规格族c8y、通用型实例规格族g6r等。下面是阿里云企业级ARM计算规格族特点、适用场景及最新收费标准和活动价格参考。
阿里云企业级ARM计算规格族特点、适用场景及收费标准与活动价格参考
|
21天前
|
存储 机器学习/深度学习 网络协议
阿里云高性能计算实例规格族有哪些?各自特点、适用场景介绍
阿里云高性能计算是的阿里云服务器ECS的架构之一,高性能计算实例规格族主要应用于各种需要超高性能、网络和存储能力的应用场景,例如人工智能、机器学习、科学计算、地质勘探、气象预报等场景。高性能计算实例规格族有高性能计算优化型实例规格族hpc8ae、高性能计算优化型实例规格族hpc7ip、计算型超级计算集群实例规格族sccc7等。下面是阿里云高性能计算实例规格族特点、适用场景介绍。
阿里云高性能计算实例规格族有哪些?各自特点、适用场景介绍
|
28天前
|
存储 人工智能 搜索推荐
阿里云佘俊泉:边缘云场景的探索与机遇
2024全球分布式云大会·北京站,阿里云演讲《创新涌现,边缘云场景的探索与机遇》
47 8
阿里云佘俊泉:边缘云场景的探索与机遇
|
2月前
|
弹性计算 关系型数据库 MySQL
阿里云MySQL云数据库优惠价格、购买和使用教程分享!
阿里云数据库使用流程包括购买和管理。首先,选购支持MySQL、SQL Server、PostgreSQL等的RDS实例,如选择2核2GB的MySQL,设定地域和可用区。购买后,等待实例创建。接着,创建数据库和账号,设置DB名称、字符集及账号权限。最后,通过DMS登录数据库,填写账号和密码。若ECS在同一地域和VPC内,可内网连接,记得将ECS IP加入白名单。
454 2
|
2月前
|
存储 SQL 数据管理
阿里云数据库 SelectDB 内核 Apache Doris 如何基于自增列满足高效字典编码等典型场景需求|Deep Dive 系列
自增列的实现,使得 Apache Doris 可以在处理大规模时展示出更高的稳定性和可靠性。通过自增列,用户能够高效进行字典编码,显著提升了字符串精确去重以及查询的性能。使用自增列作为主键来存储明细数据,可以完美的解决明细数据更新的问题。同时,基于自增列,用户可以实现高效的分页机制,轻松应对深分页场景,有效过滤掉大量非必需数据,从而减轻数据库的负载压力,为用户带来了更加流畅和高效的数据处理体验。
|
2月前
|
SQL 关系型数据库 MySQL
阿里云mysql数据库价格购买和使用教程
阿里云数据库使用指南:购买MySQL、SQL Server等RDS实例,通过选择配置、地域和可用区完成购买。创建数据库和账号,分配权限。使用DMS登录数据库,进行管理操作。确保ECS与RDS在同一地域的VPC内,配置白名单实现内网连接。详细步骤见官方文档。
639 1
|
2月前
|
关系型数据库 MySQL 数据库
使用阿里云的数据传输服务DTS(Data Transmission Service)进行MySQL 5.6到MySQL 8.0的迁移
【2月更文挑战第29天】使用阿里云的数据传输服务DTS(Data Transmission Service)进行MySQL 5.6到MySQL 8.0的迁移
227 2
|
2月前
|
边缘计算 专有云 虚拟化
阿里云神龙在智慧办公场景下的特点
阿里云神龙在智慧办公场景下的特点