单点登录(Single Sign On)简称为SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
SAML(Security Assertion Markup Language)是一个XML框架,也就是一组协议和规范,可以用来传输企业用户身份证明, 主要是企业外的身份跨域传递。比如,公司(IDP)的用户要访问SAP HANA XS 应用(sp),为了保证身份安全,我们可以采用除了加密签名等措施,还要采用SAML规范来传输,传输的数据以XML形式,内容符合SAML的推荐标准,这样我们就可以不要求idp和sp采用什么样的系统,只要求能理解SAML规范即可。下图阐述了利用SAML单点登录的原理。
1 用户想使用SP(可认为是SAP HANA XS App),在浏览器输入SP的URL。
2 SP将生成SAML 请求。
3 SP让浏览器重定向到IDP做认证。
4 IDP收到SAML请求检查用户是否已认证,并且在合法期内,否则IDP将要求用户将进行认证。
5 IDP生成SAML响应。
6 IDP将封装好的响应返回给浏览器,浏览器返回给SP。
7 SP验证SAML响应,该响应中包含用户的信息。
8 SP根据SAML响应,确定用户的合法性以及用户信息,同意用户登录。
本文将介绍如何利用开源软件Shibboleth作为IDP,让SAP HANA XS App支持单点登录。
1 准备安装环境所需要的域名,确保IDP服务器和SP服务器可通过域名互相进行通信。
2 端口80和443需要被开放(保证没有其他程序在占用),注意防火墙对端口访问权限的问题。
3 IDP服务器与SP服务器时钟是同步的。
1 下载安装JDK1.5+,Tomcat6.0.17+,Apache2.2+,并确保JAVA_HOME环境变量的正确设置,这里我用的是JDK1.6,Tomcat6.0.29, Apache 2.2。
注:必须从http://httpd.apache.org/网站上下载包含SSL支持的Apache安装程序并安装。
2 下载IDP组件,下载之后解压并将解压之后的目录移动到你所要安装的目标目录。
(IDP下载地址为:http://shibboleth.internet2.edu/downloads/shibboleth/idp/latest/)
3 安装IDP 此时需要输入IDP home目录以及域名(不要输入IP)
4 将IDP_HOME/lib/endorsed下的所有包复制到TOMCAT_HOME/endorsed下,IDP_HOME和TOMCAT_HOME分别指IDP和TOMCAT的安装目录(如果TOMCAT根目录下没有endorsed文件夹则新建一个即可)。
5 使tomcat支持ssl传输
1) 下载tomcat6-dta-ssl-1.0.0.jar (asc)放到TOMCAT_HOME/lib/目录下。(tomcat7则需要不同的jar包)
2) 在TOMCAT_HOME/conf/server.xml中增加如下的配置(在安装IDP过程中用到的密码替换掉PASSWORD):
<Connector port="8443"
protocol="org.apache.coyote.http11.Http11Protocol"
SSLImplementation="edu.internet2.middleware.security.tomcat6.DelegateToApplicationJSSEImplementation"
scheme="https"
SSLEnabled="true"
clientAuth="true"
keystoreFile="IDP_HOME/credentials/idp.jks"
keystorePass="PASSWORD" />
6 部署IDP.war
创建TOMCAT_HOME/conf/Catalina/localhost/idp.xml文件并用以下代码替换其内容。
<Context docBase="IDP_HOME/war/idp.war"
privileged="true"
antiResourceLocking="false"
antiJARLocking="false"
unpackWAR="false"
swallowOutput="true" />
7 加入以下行至Apache的配置文件httpd.conf中:
ProxyPass /idp/ ajp://localhost:8009/idp/
8 更改Tomcat的TOMCAT_HOME/conf/server.xml中的端口8009 AJP13连接器,我们将要增加 request.tomcatAuthentication="false"和Address="127.0.0.1"让Apache允许发送用户名信息到IDP。
<Connector port="8009"
enableLookups="false" redirectPort="8443" protocol="AJP/1.3"
9 在Apache的httpd.conf或ssl.conf配置文件中定义以下程序,强制身份验证的时候访问RemoteUser处理程序。
<Location /idp/Authn/RemoteUser>
AuthType Basic
AuthName "My Identity Provider"
AuthUserFile D:/opt/shibboleth-idp/credentials/user.db
require valid-user
</Location>
10 用htpasswd命令创建一个或两个测试用户
htpasswd -c D:/opt/shibboleth-idp/credentials/user.db myself
htpasswd命令为Apache工具命令必须在命令行下进入到Apache安装目录的bin目录下才可以执行,myself为用户名。
11 测试IDP是否安装成功:
用https://localhost/idp/profile/Status访问,如果页面出现’ok’则说明安装正确。这并不意味着你将能够登录到任何东西,因为目前还尚未配置的IDP使用的组织的基础设施。
SAP HANA 端的配置可根据http://scn.sap.com/docs/DOC-50418(Use SAML to enable SSO for your SAP HANA XS App)进行配置。
其中IDP的metadata可在IDP服务器的IDP_HOME/metadata/idp-metadata.xml得到。
1 生成的SAP HANA的metadata了保存为sp-metadata.xml文件放在IDP_HOME/metadata/中。
2 配置 IDP_HOME/conf/ relying-party.xml,添加:
<metadata:MetadataProvider id="URLMD" xsi:type="metadata:FilesystemMetadataProvider"
metadataFile="/usr/local/shibboleth-idp/metadata/sp-metadata.xml" />
使用chrome访问可看到错误信息。
修改IDP_HOME/conf/ relying-party.xml 中的 xsi:type="saml:SAML2SSOProfile"属性encryptAssertions="never"
在IDP的SAML响应中添加Name ID 需要修改IDP_HOME/conf/ attribute-resolver.xml,添加:
<resolver:AttributeDefinition id="commPortalPhone" xsi:type="ad:PrincipalName" xmlns="urn:mace:shibboleth:2.0:resolver: ad">
<resolver:Dependency ref="staticAttributes" />
<resolver:AttributeEncoder xsi:type="enc:SAML1StringNameIdentifier" xmlns="urn:mace:shibboleth:2.0:attribute: encoder"
nameFormat="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified"/>
<resolver:AttributeEncoder xsi:type="enc:SAML2StringNameID" xmlns="urn:mace:shibboleth:2.0:attribute:encoder"
nameFormat="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified"/>
</resolver:AttributeDefinition>
以及attribute-filter.xml,添加
<afp:AttributeFilterPolicy id="releaseCommPortalPhoneToAnyone">
<afp:PolicyRequirementRule xsi:type="basic:ANY"/>
<afp:AttributeRule attributeID="commPortalPhone">
<afp:PermitValueRule xsi:type="basic:ANY"/>
</afp:AttributeRule>
</afp:AttributeFilterPolicy>
设定NameID的nameFormat为:urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified
本文是使用RemoteUser处理方式进行用户的验证,一般企业中不会使用该方法,若企业使用LDAP管理用户,则需要修改IDP_HOME/conf/handler.xml 为UsernamePassword方式:
<ph:LoginHandler xsi:type="ph:UsernamePassword"
jaasConfigurationLocation="/usr/local/shibboleth-idp/conf/login.config">
<ph:AuthenticationMethod>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</ph:AuthenticationMethod>
</ph:LoginHandler>
在/usr/local/shibboleth-idp/conf/login.config 配置LDAP的访问方式。
Use SAML to enable SSO for your SAP HANA XS App
http://scn.sap.com/docs/DOC-50418
Shibboleth 2.x Home
https://wiki.shibboleth.net/confluence/display/SHIB2/Home
Linux下安装openldap
http://blog.csdn.net/zhangjunfangkaixin/article/details/3976669
本文的测试案例所使用的SAP HANA版本为SAP HANA SPS7 Revision 74.00,SAP BusinessObjects Data Services 4.1 Support Package 1,Hadoop 1.1。想获取更多SAP HANA学习资料或有任何疑问,请关注新浪微博@HANAGeek!我们欢迎你的加入!
转载本文章请注明作者和出处<文章url>,请勿用于任何商业用途
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
35 | |
25 | |
14 | |
13 | |
7 | |
7 | |
6 | |
6 | |
5 | |
5 |