Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 
Former Member
0 Kudos

    单点登录(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响应,确定用户的合法性以及用户信息,同意用户登录。

本文将介绍如何利用开源软件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>,请勿用于任何商业用途