Skip to Content

    单点登录(Single Sign On)简称为SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

         SAMLSecurity Assertion Markup Language)是一个XML框架,也就是一组协议和规范,可以用来传输企业用户身份证明, 主要是企业外的身份跨域传递比如,公司(IDP)的用户要访问SAP HANA XS 应用(sp),为了保证身份安全,我们可以采用除了加密签名等措施,还要采用SAML规范来传输,传输的数据以XML形式,内容符合SAML的推荐标准,这样我们就可以不要求idpsp采用什么样的系统,只要求能理解SAML规范即可。下图阐述了利用SAML单点登录的原理。

1 用户想使用SP(可认为是SAP HANA XS App),在浏览器输入SPURL

2 SP将生成SAML 请求。

3 SP让浏览器重定向到IDP做认证。

4 IDP收到SAML请求检查用户是否已认证,并且在合法期内,否则IDP将要求用户将进行认证。

5 IDP生成SAML响应。

6 IDP将封装好的响应返回给浏览器,浏览器返回给SP

7 SP验证SAML响应,该响应中包含用户的信息。

8 SP根据SAML响应,确定用户的合法性以及用户信息,同意用户登录。

/wp-content/uploads/2014/08/1_527635.gif

本文将介绍如何利用开源软件Shibboleth作为IDP,让SAP HANA XS App支持单点登录。

ShibbolethIDP)端配置

准备安装环境

1 准备安装环境所需要的域名,确保IDP服务器和SP服务器可通过域名互相进行通信。

2 端口80443需要被开放(保证没有其他程序在占用),注意防火墙对端口访问权限的问题。

3 IDP服务器与SP服务器时钟是同步的。

IDP的安装

1 下载安装JDK1.5+,Tomcat6.0.17+,Apache2.2+,并确保JAVA_HOME环境变量的正确设置,这里我用的是JDK1.6Tomcat6.0.29, Apache 2.2

注:必须从http://httpd.apache.org/网站上下载包含SSL支持的Apache安装程序并安装。

下载IDP组件,下载之后解压并将解压之后的目录移动到你所要安装的目标目录。

(IDP下载地址为:http://shibboleth.internet2.edu/downloads/shibboleth/idp/latest/)

3 安装IDP 此时需要输入IDP home目录以及域名(不要输入IP

4 IDP_HOME/lib/endorsed下的所有包复制到TOMCAT_HOME/endorsed下,IDP_HOMETOMCAT_HOME分别指IDPTOMCAT的安装目录(如果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 更改TomcatTOMCAT_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″

  1. request.tomcatAuthentication=”false” address=”127.0.0.1″ />

9 Apachehttpd.confssl.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 HANASP)端配置

SAP HANA 端的配置可根据http://scn.sap.com/docs/DOC-50418Use SAML to enable SSO for your SAP HANA XS App)进行配置。

其中IDPmetadata可在IDP服务器的IDP_HOME/metadata/idp-metadata.xml得到。

部署SP MetadataIDP

1 生成的SAP HANAmetadata了保存为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

IDPSAML响应中添加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>

3 NameID format is not support

设定NameIDnameFormat为: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.00SAP BusinessObjects Data Services 4.1 Support Package 1Hadoop 1.1。想获取更多SAP HANA学习资料或有任何疑问,请关注新浪微博@HANAGeek!我们欢迎你的加入!

转载本文章请注明作者和出处<文章url>,请勿用于任何商业用途

To report this post you need to login first.

Be the first to leave a comment

You must be Logged on to comment or reply to a post.

Leave a Reply