单点登录( Single Sign On,简称 SSO
)相信大家都不陌生,它是企业信息化建设的重要组成部分。笔者前段时间刚刚参与了一个关于单点登录升级的小项目,收获颇丰,特地拿出来和大家分享。
**背 景**
客户早期在自己的门户网站上实现了基于MD5/BASE64加密方式的单点登录。现阶段由于SuccessFactors升级安全策略,启用了SAML2.0协议。客户本身安装了Microsoft
ADFS的产品服务,但是没有对应接口的调用API,且没有充足的测试调试时间,无法快速平滑的进行接口的改造和切换。因此转而尝试SAPNetWeaver
7.5的单点登录解决方案。
**关于SAML2.0**
SAML,全称为Security Assertion Markup
Language,是一种用于安全性断言的标记语言,目前的最新版本是2.0。该协议的核心是IDP(Identity
Provider,即身份鉴别服务器)和SP(Service Providers,即服务提供者)通过用户浏览器的重定向访问实现数据交换。
在SAML协议中,一旦用户身份被主网站(IDP)认证,该用户再去访问其他在主站注册过的应用(SP)时,都可以直接登录,而不用再输入身份和口令,因此其非常适合应用于单点登录场景。
SAML2.0的处理过程,网上有很多讲解资料,笔者这里结合案例做了简化,主要流程可以参考下图:
单点登录处理流程
1)用户通过终端浏览器登录到portal;
2)当点击门户上的SuccessFactors入口时,门户会调用IDP接口(实际上就是从后台登录到NetWeaver);
3)IDP对用户进行认证,成功后会生成一段加密的认证信息,以html页面源码的形式返回给浏览器;
4)浏览器收到返回结果后自动提交,主要作用就是将认证结果自动发送给SP;
5)SP收到请求,解密并判断信息是否合法。如果合法,则跳转至最终页面;
6)浏览器最终跳转到了用户想访问的SF页面。
以上过程,用户仅仅输入了一次密码(登录到portal)。实际上,在向IDP发送请求时,后端也进行了一次基本密码认证(登录到NetWeaver),这里需要做二次开发。本例中是把NetWeaver当作IDP来使用了,如果直接使用SAP
NetWeaver Portal,仅通过配置就可以实现单点登录。
SAP官方提供了多个基于SAML2.0的 单点登录解决方案 ,本例中参考的是 SAP Portal与SuccessFactors的单点登录方法
。由于篇幅所限,详细配置过程就不放出来了,感兴趣的朋友可以在文末获取相关配置文档。
**接口调用方法**
配置完成后,进入到NetWeaver
Administrator的SAML2.0界面,在身份提供者页签我们找到单点登录端点URL,格式是:https://ip:port/saml2/idp/sso
此地址用GET方法调用,有两个参数:
• saml2sp,配置的SP名称;
• RelayState,想要跳转到的页面,一般默认为SuccessFactors登录后首页。
获取单点登录端点地址
用Postman工具模拟调用成功后,会返回一个html页面的代码。
将返回结果复制出来,保存成html文件。查看源代码,可以发现页面实际上是一个自动刷新提交的form表单,hidden部分是SP返回的断言认证密文和将要跳转的终端页面。
用浏览器打开,即可进入主页 。
工具调试
IDP返回的页面代码
用户最终看到的页面
在NetWeaver
Administrator的SAML2.0配置界面,我们可以查看到这个会话的相关信息。包括用户名、用户的终端IP、用户登录的SP、会话的有效期等等。会话的有效期默认为一小时,可以手动终止会话。系统
每隔6小时 自动清理一次过期会话。
查看会话
会话详细信息
**注意事项**
• 账号的同步问题
单点登录的账号必须在Portal、NetWeaver7.5、SuccessFactors中都存在。本案例中,客户的账号是统一维护在Microsoft
ADFS中。我们可以在NetWeaver的账号管理界面,将数据源变更为"Microsoft
ADS+数据库"。然后配置一个LDAP服务,将账号信息直接从ADS中同步过来。
注意账号名重复的,系统会优先保留ADS同步过来的账号。本地数据库中的账号会自动设置为锁定状态。
账号管理界面
修改账号的数据源
配置LDAP服务
• Javascript的兼容性问题
IDP认证成功之后返回的html页面,在部分浏览器中不兼容,会导致浏览器卡在空白页面,要注意在二次开发中予以规避调整。
好了,本期 分享就到这里了 。 大家可以在公 众号后 台留言 获取本文中 涉及到的相关 配置文档(留言暗号 : S AML2. 0
)。
关注我,了解更多SAP开发小技巧
** 参考链接: **
https://wiki.scn.sap.com/wiki/display/Security/Single+Sign-On+with+SAML+2.0
https://archive.sap.com/documents/docs/DOC-29737