基于saml2.0的平台(适用多种平台)单点登录配置,以okta为例

本文介绍了如何通过SAML2.0协议将自开发Java系统与SAP Succesfactory整合,实现单点登录,重点讲解了基于Spring和OKTA平台的配置步骤,并分享了SAP SCI集成的挑战与解决策略。
部署运行你感兴趣的模型镜像

目录

现状和问题

解决方案原理

基于saml2.0协议的Java实现

基于OKTA平台的实例演示

结论

题外话


现状和问题

事情的起因在于接到一个需求,要求在SAP的succesfactory中使用单点登录的方式来集成外部的Java自开发系统。

现有的情况是,在登录succesfactory(下称sf平台)后,点击已有的链接地址,会跳转到自开发登录界面,需要再输入用户名密码才能登录。这种方式肯定是比较繁琐,所以希望能够在sf平台一次登录,到处认证。所以就需要用到单点登录。

根据掌握的情况是,sf平台是已经配置且只能唯一配置第三方单点登录平台,所以只能沿用目前存在的单点登录认证平台,经过了解,目前使用的三方单点登录平台使用的也是SAP的系列产品—SCI(SAP Cloud Identity Services),或者叫IAS(这个英文解释没找到)。

                                                   图1   目前系统现状

通过上图可以看出,目前的自开发和sf平台是都支持独立的Web访问的,但是sf平台可以通过单点登录(SSO)的方式,纳入到SCI平台的生态系统中,如果公司还有别的项目也采用了SCI认证,那么只要登录了SCI平台,就可以实现真正意义上的一处登录,处处登录。

目前存在情况便是自开发平台和sf平台各自为战,即使是通过SCI的统一认证,自开发平台还是会需要再认证一次,这样就会给业务实现带来不必要的资源消耗。

我们真正想要实现的方式便是如下图所示:

                                                     图2   改造后系统情况

可以看到,通过把自开发平台纳入到SCI平台,经过单点登录(SSO),可以实现只需要登录一次SCI平台,便可以任意访问sf和自开发平台系统。

解决方案原理

目前市面上主流的单点登录解决方案有2种,一种基于auth2.0、一种是saml2.0,其各有优劣。关于二者的前置知识,读者需要自行查找,这里提供一个快速入口:

SAML和OAuth2这两种SSO协议的区别

一文搞懂saml2.0协议

由于SCI平台是基于saml2.0协议实现的单点登录,那么我们着重介绍一下saml2.0。

要了解saml2.0先要认识3个角色,分别是Idp(认证服务器)、Sp(服务提供者)、客户端。我们前面提到的SCI平台的角色就是Idp,而sf和自开发平台都属于Sp,客户端就是我们常用的桌面浏览器。

saml2.0协议的核心流程便是,如果要从客户端利用Idp通过SSO的形式访问Sp,需要提前在Idp和Sp保存对方的公钥文件,这样方便双方请求的时候能够进行认证,防止权限不够的401错误。

当在客户端输入Sp的url地址,Sp会通过后台重定向到Idp提供的sso地址去进行请求,由于Sp提前保存了Idp的公钥信息,可以顺利的访问到Idp提供的认证地址,在Idp接收到Sp的正常请求后,又会跳转到提前保存好的Sp指定url,同样也由于Idp保存了Sp的公钥信息,可以使得访问顺利进行。

从而完成客户端对Sp服务器的单点登录。

而这一切对于客户端来说是完全无感知的,如果细心观察,会发现浏览器地址栏的url会跳来跳去,之后会跳转到我们需要访问的页面。其简化步骤如下图所示:

                        图3 Idp通过sso登录Sp简化步骤

基于saml2.0协议的Java实现

本文以Java开发为例,实现方式有2种,一种是基于Spring框架的模式,另外一种是纯Java模式,利用Jar包引入的方式onelogin。

笔者两者都使用过,简单的说下结论,尽量用spring框架相关的saml验证方式,onelogin方式在理论上也是可行,但是由于时间紧迫,尝试了一下onelogin的demo和平台的调试,但是没有联调成功,其具体方式见链接onelogindemo

而基于Spring框架的saml单点登录的实现方式的具体链接如下:springSaml

纵观saml2.0的实现方式,其实都是表象,其实质是它们都需要遵循saml2.0协议,只是实现的方式不同,只有抓住这个中心点,我们才能不限于任何平台来做单点登录。

基于OKTA平台的实例演示

由于SCI平台的特殊性,以及Sap文档的错漏百出,关于SCI平台集成smal2.0协议的资料无法完整演示,所以我们使用OKTA作为我们的SSO登录演示平台。

这里提一下,经过笔者的验证,其实所谓的onelogin、SCI、OKTA,在基于saml2.0协议的单点登录配置,虽然说每个平台的配置不尽相同,但是其配置思路基本都是一脉相承。相信只要了解了其中任何一个,其余的平台也都是可以触类旁通。

这里选取的OKTA平台是笔者认为效率最高的。

这里基于OKTA的配置,在前文的springSaml中已经有超链接跳转,里面的项目有详细描述。

本文只是针对OKTA配置中的某些不完整的地方进行补充,可以帮助大家尽快的搭建demo。

OKTA可以免费申请开发者账号:申请链接

通过OKTA帮助文档完成saml Idp搭建。

这里笔者说一下需要注意的点:

  1. 按步骤搭建中,需要设置应用不为内部应用,这样才可以与外部系统进行SSO。具体如下图:


     
  2. 在Idp服务器完成SSO验证以后,需要再跳转到Sp服务器,此时需要把Sp服务器中的公钥文件上传到OKTA平台上,不然Idp无法访问Sp服务器,具体上传地方如下:

 在Upload按钮处上传Sp公钥证书。

完成了OKTA的saml单点登录验证,其实SCI平台的配置也基本大同小异。这里就不一一说明,有需要注意的点就是SCI下载的metadata.xml(Tenant Settings->SAML 2.0 Configuration)不能直接使用,只需要提取其关键信息,诸如Idp的SSO、SLO链接、entityId还有509证书密钥即可,可直接使用SpringSamlDemo中Idp的xml配置,修改关键信息即可。

结论

其实无论实现的方式如何,核心便是要了解saml2.0的SSO登录流程及其原理,每个平台实现的方式都不尽相同,那么我们就抓住它们的共性:saml2.0协议作为突破口。当完成一个平台的SSO验证之后,其余平台的问题也基本迎刃而解。

题外话

在做SCI平台集成外部自开发系统的单点登录的时候,搜索了SAP的大量资料,发现文档竟没有这方面的描述,更多的都是一些SAP平台环境或者Azure相关的一些集成资料,关于自开发如何配置与SAP的SCI集成的文档,反正我是压根没看到。

一度都打算回复这个需求无法实现了,因为站在与SAP做集成的角度,没有文档就意味着不可能实现。

但是我换了一种思路,直接从saml2.0协议出发:我先实现一套标准的saml2.0协议的SSO流程,再把这套流程套入到SAP,我想SAP既然作为一套标准产品它必然是会支持标准的saml2.0协议。

不出所料,我先实现了OKTA的SSO登录,接着实现SCI平台的便是水到渠成了。

希望这样的思路对大家有所帮助。

SAP关于SCI方面的链接放下,大家有需要可以自取,但是访问好像需要有账号才行:SCI链接

链接可能会失效,大家可以直接进SAP HELP搜索,Configure SAML 2.0 Service Provider或者SAP Cloud Identity Services。

您可能感兴趣的与本文相关的镜像

Llama Factory

Llama Factory

模型微调
LLama-Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调

aml是一种xml格式的语言。 翻译过来大概叫 安全断言(标记)语言。 这里有两个点: 第一是“安全”, 第二是“断言(assertion)”。 用人话翻译saml就是 用安全的方式表达断言一种语言。 先看它的核心概念“断言”。 断言是什么? 就是做出判断的语言。比如一句话: 小明是超级管理员。 这就是一个断言。再来一个子:小红没有权限读取根目录。这也是一个断言。 这种“做出判断的语句”我们在很多场合都需要用到。 比如你在网上尝试登陆一个服务的时候, 这个服务需要知道你是不是合法的用户。 这个时候如果你能提供一个“安全,可靠,可信任”的断言:“小明有权登陆XX服务”, 那么这个服务就知道你合法了, 于是就能为你提供服务了。 这个子比较抽象,但基本上能表达断言在实际用中的作用了。 实际上saml的大部分用就在于证明你是谁,你拥有什么权限等等了。 saml中大部分主要内容也都是类似于:你是谁, 你有什么。。等等这些简单的语句。 详细内容后面会介绍。 接下来第二个概念就是“安全”了。 你能提供一个断言, 别人能不能假冒你提供一个断言从而骗取服务端的信任呢? 另外服务端为什么会信任你给的断言呢? 这就涉及到安全的问题了。为了防止断言被假冒,篡改。saml中加入了安全措施。 当然现今能抵御假冒,篡改,重放攻击的利器就是公钥-私钥系统了。 通过给断言加上签名和加密,再结合数字证书系统就确保了saml不受攻击。
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值