本篇参考:Salesforce Admin篇(四) Security 之Two-Factor Authentication & Single Sign On
https://developer.salesforce.com/docs/atlas.en-us.230.0.sso.meta/sso/sso_mobileDT_saml_n_oauth.htm?search_text=relayState
https://developer.salesforce.com/docs/atlas.en-us.224.0.api_rest.meta/api_rest/dome_sobject_create.htm
一. Salesforce acting as IdP, IdP initiated
我们在前一个博客中也解释了 SSO中的 SP(Service Provider) 以及 IdP(Identity Provider),这里举一个简单的例子进行深化概念。 help.salesforce.com 通过salesforce的账号进行登录, salesforce端进行相关的账号信息认证,然后认证通过以后重新跳转到 help.salesforce.com,然后根据你的sf账号的权限可以访问相关的help中的文档以及操作。在这个demo中,help网址就是一个SP,用于提供服务,salesforce就是IdP,作为身份认证用。
我们在项目中通常使用 SF和其他的平台做SSO,主要有三种的形式。
Salesforce 作为 SP,其他系统作为IDP;
Salesforce作为IdP,并且访问SP的内容是由 IdP初始化;
Salesforce作为IdP,并且访问内容由SP初始化。
说起来有点绕,通过上面的参考的 SSO进行一个例子。我们之前的SSO实现的是salesforce to salesforce的功能。两个salesforce的环境,其中:
zero-zhang-dev-ed.my.salesforce.com:作为IdP;
https://zhangyueqi-3-dev-ed.my.salesforce.com:作为SP;
现在的需求是从IdP的环境有一个URL,点击这个URL可以直接跳转到SP环境的 Account 列表,这个时候,我们需要用到 RelayState参数。
首先我们需要知道如何可以不输入账号密码就可以直接跳转到SP 环境,通过 connected app,我们可以看到SAML Login Information区域有一个 IdP-Initiated Login URL,访问此链接就可以直接跳转到SP。
所以我们需要做的就是在这个URL基础上,添加 RelayState参数,跳转到对端系统的指定位置即可。Account 列表是 /001,所以我们设置 RelayState为/001即实现IdP Initiated的场景。
这里需要注意一点, RelayState区分大小写,只能按照当前的大小写填写,如果大小写有误,则会跳转无效。
二. 标准 Rest API操作数据
我们和外部系统操作时,如果对端只是需要在我们这边去简单的操作数据,没有复杂的逻辑,数据量也还好的情况下,我们完全可以使用标准的 Rest API去操作数据。这种好处是省去了我们写restful接口以及两边系统沟通的时间,只需要了解标准的restful接口规则即可。
我们可以使用CURL方式去访问去操作数据,我们通常操作类型是数据的CRUD,以及通过外键进行C/U。接下来通过workbench进行简单的模拟。
1. 查询场景
1)通过Record Id去查询:使用的Http方式为get,并且访问的格式为 /services/data/v51.0(这里填写版本号)/sobjects/Account(这里填写表的API名称)/Record Id。整体的cURL访问:curl https://yourInstance.salesforce.com/ + 上述的格式即可。
如果我们只想查询这条数据的指定的字段,我们只需要在后面添加参数 ?fields=字段名1,字段名2。 字段之间使用逗号分隔。
2) 通过外键操作数据:我们知道的是,当一个字段设置成外键,他通常都是设置成external id & unique,所以通常通过 external id可以找到唯一的一条数据,在标准的rest api中,我们可以通过external id去获取数据。和上面的写法前面是一样的,后者变化如下 /sObjectName/ 外键字段的API名称/ 外键字段的值。在我们下方的demo中,我们在 Account表中创建了一个外键,API名称为 External_Id__c, 所以下面的链接是 External_Id__c为 Ext_00001的对应的Account数据