马上注册,结交更多数据大咖,获取更多知识干货,轻松玩转大数据
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
单点登录(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支持单点登录。 Shibboleth(IDP)端配置准备安装环境1 准备安装环境所需要的域名,确保IDP服务器和SP服务器可通过域名互相进行通信。 2 端口80和443需要被开放(保证没有其他程序在占用),注意防火墙对端口访问权限的问题。 3 IDP服务器与SP服务器时钟是同步的。 IDP的安装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="ASSWORD" /> 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" - request.tomcatAuthentication="false" address="127.0.0.1" />
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(SP)端配置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得到。 部署SP Metadata到IDP1 生成的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访问可看到错误信息。 1 Response is not success修改IDP_HOME/conf/ relying-party.xml 中的 xsi:type="saml:SAML2SSOProfile"属性encryptAssertions="never" 2 No name id in subject在IDP的SAML响应中添加Name ID 需要修改IDP_HOME/conf/ attribute-resolver.xml,添加: <resolver:AttributeDefinition id="commPortalPhone" xsi:type="adrincipalName" xmlns="urn:mace:shibboleth:2.0:resolver: ad"> <resolverependency ref="staticAttributes" /> <resolver:AttributeEncoder xsi:type="enc:SAML1StringNameIdentifier" xmlns="urn:mace:shibboleth:2.0:attribute: encoder" nameFormat="urnasis:names:tc:SAML:1.1:nameid-format:unspecified"/> <resolver:AttributeEncoder xsi:type="enc:SAML2StringNameID" xmlns="urn:mace:shibboleth:2.0:attribute:encoder" nameFormat="urnasis:names:tc:SAML:1.1:nameid-format:unspecified"/> </resolver:AttributeDefinition> 以及attribute-filter.xml,添加 <afp:AttributeFilterPolicy id="releaseCommPortalPhoneToAnyone"> <afpolicyRequirementRule xsi:type="basic:ANY"/> <afp:AttributeRule attributeID="commPortalPhone"> <afpermitValueRule xsi:type="basic:ANY"/> </afp:AttributeRule> </afp:AttributeFilterPolicy> 3 NameID format is not support设定NameID的nameFormat为:urnasis:names:tc:SAML:1.1:nameid-format:unspecified 拓展本文是使用RemoteUser处理方式进行用户的验证,一般企业中不会使用该方法,若企业使用LDAP管理用户,则需要修改IDP_HOME/conf/handler.xml 为UsernamePassword方式: <phoginHandler xsi:type="ph:UsernamePassword" jaasConfigurationLocation="/usr/local/shibboleth-idp/conf/login.config"> <ph:AuthenticationMethod>urnasis:names:tc:SAML:2.0:ac:classesasswordProtectedTransport</ph:AuthenticationMethod> </phoginHandler> 在/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。
|