SuccessFactors OData OAuth with SAP IAS-generated SAML assertion

embedded/2025/2/4 1:59:13/
导读

IAS:一句话说明白。SAP相关的系统可以通过IAS登录,只要IAS登录,其他系统免密登录

作者:vivi,来源:osinnovation

图片

上图有三个角色:brower,就是自己的浏览器,sp就是我们的目标系统,有可能是Successfactors或者其他云,idp就是ias系统。

上图大致的逻辑就是,你通过浏览器去访问sf(sp)系统(https://performancemanager15.sapsf.cn/sf/start/#/companyEntry),sf把这个请求转到idp(ias)中,ias会和sf系统做信任,所以登录ias系统,就自动跳转到sf系统。

具体可以参考:https://blog.csdn.net/weixin_33743703/article/details/92960139?ops_request_misc=&request_id=&biz_id=102&utm_term=smal%20%E5%85%AC%E9%92%A5%E4%B8%8E%E7%A7%81%E9%92%A5&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-92960139.142^v101^pc_search_result_base9&spm=1018.2226.3001.4187

理解IAS,我们先理解下上面这个图,方便以后做单点登录的朋友,特别是SuccessFactors的顾问,因为sso不是技术解决方案,应该算业务解决方案,所以这个技术要求比较高,但是不属于开发类的对sf顾问来说比较难,今天用一个例子去介绍这几个的含义

我们都知道,大企业都有很多的子系统,如果每个系统都要输入账号与密码,那这个很困难,时间长根本记不住,所以就需要通过SSO的方式,只要登录一个系统,所有系统就免密登录。

SP:SP简单理解就是我们的应用系统,例如SAP的sucessfactors、ariba、sac分析云系统。

IDP:sap有7朵云,那么这7个应用系统是不是可以通过一套系统登录,这7朵云都免密登录,这个idp就是架在7朵云之前的系统。

1.SAMLRequest
  • 当用户的身份无法鉴定时,SP 会向 IdP 发送 SAML Request 信息(通过浏览器发送),请求 IdP 来鉴定用户身份。

图片

2.SAMLResponse
  • IdP 收到 SAML Request 后,会对用户身份进行认证:当用户在 IdP 完成登录后,SAML IdP 将用户身份断言发送给 SP(放在表单中,通过浏览器 POST 请求发送)。SAML IdP 的响应内容如下:

图片

上面是前备技能,后期会专门用springboot+saml+ias的SSO跳转的例子。

图片

1. Background / Design

昨天分享一篇文章,是上图②的下部分操作(外部idp服务生成smal assertion),今天分析下上部分②的逻辑

如何生成smal

vivi rsl,公众号:osinnovation如果通过认证方式调用Sf的api

2. Setup

2.1.1 Retrieve the SAP IAS signing certificate

In IAS, 在租用菜单设置 (tenant settings). "Applications & Resources" and there to “Tenant Settings”. In the tenant settings, the signing certificate can be retrieved in “Single Sign-On”  “SAML 2.0 Configuration”   Signing Certificates.

图片

图片

图片

图片

注意:这个的509需要和sf的application保持一致

2.2 SuccessFactors

搜索栏OAuth2 Client application

图片

NameValue

Company

<SAP SF company>

Application Name

Custom application name

Description

Custom description

Application URL

sf地址

Bind to users

Optional

x.509 certificate

successfactors产生的加密文件,里面有公钥与私钥

API key

系统生成,后面需要使用

2.3. IAS Application

下一个步骤就是创建ias application,他会生成smal assertion,可以用用他获取successfactors的token,IAS应用程序将处理SAML和OAuth请求

2.3.1 Create an IAS SAML Application.

IAS Admin  Applications & Resources  Applications  Create.

NameValue

Display name

<custom>

Home URL

<empty>

Type

<optional> ("custom" types might be charged)

Parent application

None

Protocol Type

SAML 2.0

图片

2.3.2 SAML 2.0 Configuration

SAML应用程序需要使用SuccessFactors中的令牌URL进行配置。此步骤对于使应用程序能够使用“收件人”中的URL生成SAML断言至关重要。.

<select previously created application>    Trust    Single Sign-On    SAML 2.0 Configuration. 

NameValue

Name

<custom>

URL for Principal Propagation

SFAPI token URL (<SF endpoint>/oauth/token)

For preview (example): https://api15preview.sapsf.cn/oauth/token

For production (example): https://api15.sapsf.cn/oauth/token

图片

2.3.3 Subject Name Identifier and Default Name ID Format

图片

图片

图片

2.3.4 Attributes

删除所有默认的属性,添加api_key,value的值是sucessfactors里面设置的key

图片

图片

2.4 Allow Token Exchange Flow

图片

图片

图片

保存以后,需要在切换到smal2.0

图片

2.5 Applications APIs – Client Authentication

初始化创建ias access token

<select previously created application>  Application APIs  Client Authentication.

图片

图片

图片

上面是IAS系统配置的相关参数,下面就是需要开始通过工具postmain去测试,测试分三个步骤,

 步骤一:通过账号与密码的方式访问ias,得到access_token,需要在params数输入三个参数

图片

需要在headers中输入下面两个参数 

Content-Type application/x-www-form-urlencoded

Authorization:注意这里的把ClientID与ClientSecret, 按照这样的格式“Client1:Secret2"转base64,也就是下图中Basic后面生成的那串数字

图片

输入的地址如下https://IAS/oauth2/token?grant_type=password&username=xxx&password=xxx,这IAS是ias的服务器地址,请求是post请求,

图片

步骤二 使用上面的accen_token访问ias系统帮我们生成的saml assertion

curl --location 'https://{IAS_HOST}/oauth2/token?grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Atoken-exchange' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Authorization: Basic {base64-clientid-secret}' \  
--data-urlencode 'grant_type=urn:ietf:params:oauth:grant-type:token-exchange' \
--data-urlencode 'subject_token={access token}' \ 
--data-urlencode 'subject_token_type=urn:ietf:params:oauth:token-type:access_token' \
--data-urlencode 'requested_token_type=urn:ietf:params:oauth:token-type:saml2' \

图片

图片

步骤三  访问sf系统获取到token
注意: 这个时候是访问sf的地址,不是iAS的地址, 比如中国就是http://api15preview.sapsf.cn,这个是开发系统,生产环境去掉preview,注意这里的Your SF API endpoint是sf的地址,company_id是sf公司名称,client_id是sf系统的api_key,就是下图中的api_key,access token就是步骤二生成的saml assertion的access_token

图片

Example:
curl --location 'https://<Your SF API endpoint>/oauth/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data 'company_id=<Your Company ID>&client_id=<Your API Key>&grant_type=urn:ietf:params:oauth:grant-type:saml2-bearer&assertion=<access token>

图片

图片

图片

4 最后一步,用生成的token去访问SF的odata api(因为我的odata api环境问题,在postmain中无法查看,只能通过sf 日志查看)
Example:
curl --location 'https://<Your SF API endpoint>/odata/v2/User?
--header 'Authorization: Bearer <access token>'

图片

图片

图片


http://www.ppmy.cn/embedded/159342.html

相关文章

八股文 (一)

文章目录 项目地址一、前端1.1 大文件上传,预览1.2 首页性能优化1.2 流量染色,灰度发布1.3 Websock心跳机制,大数据实时数据优化1.4 Gpu 加速 fps优化1.5 echarts包大小优化和组件封装1.6 前端监控系统1.7 超大虚拟列表卡顿1. 实现2. 相关问题(1) 什么是虚拟化列表,为什么要…

【python】python油田数据分析与可视化(源码+数据集)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;专__注&#x1f448;&#xff1a;专注主流机器人、人工智能等相关领域的开发、测试技术。 【python】python油田数据分析与可视化&#xff08…

系统思考—决策

“人类理性是有限的&#xff0c;我们在复杂的世界中做出决策时&#xff0c;往往采用简化的模型。”——贝尔经济学奖得主赫伯特西蒙 面对复杂问题&#xff0c;我们往往没有足够的信息、时间或精力去做出完美决策&#xff0c;于是&#xff0c;我们依赖经验法则、直觉判断&#…

RabbitMQ5-死信队列

目录 死信的概念 死信的来源 死信实战 死信之TTl 死信之最大长度 死信之消息被拒 死信的概念 死信&#xff0c;顾名思义就是无法被消费的消息&#xff0c;一般来说&#xff0c;producer 将消息投递到 broker 或直接到queue 里了&#xff0c;consumer 从 queue 取出消息进…

一文了解性能优化的方法

背景 在应用上线后&#xff0c;用户感知较明显的&#xff0c;除了功能满足需求之外&#xff0c;再者就是程序的性能了。因此&#xff0c;在日常开发中&#xff0c;我们除了满足基本的功能之外&#xff0c;还应该考虑性能因素。关注并可以优化程序性能&#xff0c;也是体现开发能…

Spring Boot项目如何使用MyBatis实现分页查询

写在前面&#xff1a;大家好&#xff01;我是晴空๓。如果博客中有不足或者的错误的地方欢迎在评论区或者私信我指正&#xff0c;感谢大家的不吝赐教。我的唯一博客更新地址是&#xff1a;https://ac-fun.blog.csdn.net/。非常感谢大家的支持。一起加油&#xff0c;冲鸭&#x…

小红的合数寻找

A-小红的合数寻找_牛客周赛 Round 79 题目描述 小红拿到了一个正整数 x&#xff0c;她希望你在 [x,2x] 区间内找到一个合数&#xff0c;你能帮帮她吗&#xff1f; 一个数为合数&#xff0c;当且仅当这个数是大于1的整数&#xff0c;并且不是质数。 输入描述 在一行上输入一…

Jason配置环境变量

jason官网 https://jason-lang.github.io/ https://github.com/jason-lang/jason/releases 步骤 安装 Java 21 或更高版本 安装 Visual Studio Code 根据操作系统&#xff0c;请按照以下具体步骤操作 视窗 下载 Jason 的最新版本&#xff0c;选择“jason-bin-3.3.0.zip”…