salesforce - Sitecore - 如果用户使用外部身份提供商 (Salesforce SSO) 登录,如何获取用户 ID
问题描述
我对 Sitecore 网站上的身份验证有一点问题。基本上导航栏上有一个按钮,当用户单击该按钮时,它将同一用户重定向到 Salesforce 进行登录(SSO 的实施)。基本上,我将 Salesforce 用作身份提供者,将 Sitecore 网站用作服务提供者。现在我有一个问题?用户登录后,如何获取该用户的 ID。Sitecore 用户管理器中的用户是否与 Salesforce 中的用户具有相同的 ID,或者我可以只收到一封电子邮件来识别用户?
PS:对不起,如果这是一个非常愚蠢的问题,但我是制作 Sitecore 网站和 SAML SSO 的初学者。先感谢您
解决方案
稍等一下 Sitecore 和 Salesforce,您需要了解一些基础知识并手动单击登录过程,然后再将其自动化。
您可能在 Salesforce 中使用“连接的应用程序”,其中包括 OAuth2 配置(消费者密钥,也称为客户端 ID;秘密;范围列表,说明允许此应用程序代表此 SF 用户执行的操作;允许的列表可以使用此使用者密钥和密码登录的 url。等等)它甚至可能在页面底部有一些关于 Canvas 应用程序的内容。
接下来是 - 谁在登录。核心 Salesforce 用户或者您是否拥有合作伙伴社区、客户社区(最近更名为“数字体验”)。
打开隐身窗口并转到https://openidconnect.herokuapp.com/
对于登录主机,如果您有生产用户或 test.salesforce.com,如果您从沙盒中离开(您也可以使用品牌网址、mycompany--dev.my.salesforce.com 等)。如果您有社区用户,则必须将 url 更改为社区基本 url,例如https://dev-mycompany.cs123.force.com/mycommunity
不要更改任何其他内容,单击下一步,下一步,下一步。这将带您了解 OAuth2“网络服务器流程”(多种登录方式之一)。您在 SF 屏幕上输入用户名/密码,然后使用“授权码”返回该 herokuapp。该应用程序有几分钟的时间将该代码交换为实际的最终“访问令牌”和其他一些信息。此向导的最后一步调用 OpenId “userinfo” - 返回有关登录用户的一些信息。如果需要,您可以在此处提取电子邮件(如果您希望 SF 在此过程中返回额外字段,这也是可配置的)
关闭该浏览器窗口。检查SF中的“连接的应用程序”。打开新的隐身窗口,做同样的事情,但这次输入你的 url、消费者密钥和秘密(你可能必须先在 SF 中编辑应用程序才能允许回调https://openidconnect.herokuapp.com/callback
)。
所以现在你应该对整个登录过程有了大概的了解。您的站点核心应用程序可能会做同样的事情,接收授权码并将其交换为最终令牌。此时,您拥有有效的 SF 会话 ID,可用于调用“userinfo”、运行查询(如果应用允许 API 访问,请检查“范围”)等。
我怀疑 Sitecore 开发人员是手工创建的,你可能有一些 Spring 的东西,比如spring.security.oauth2.client
...... ?
这是一个很大的话题,还有其他方法可以做到(其他 OAuth 流程,当您在 SF 中嵌入外部页面作为 iframe 时发送有关当前用户的信息,您需要阅读有关“画布应用程序”的信息)......但是根据您提供的信息,这是最好的猜测。您可能还想查看一些入门课程,例如https://trailhead.salesforce.com/content/learn/projects/build-a-connected-app-for-api-integration/implement-the-oauth-20-web-服务器身份验证流
https://developer.salesforce.com/docs/atlas.en-us.api_streaming.meta/api_streaming/code_sample_auth_oauth.htm(Java 但非常手工制作的原始 HTTP,可能 Spring 安全性更好)
推荐阅读
- python - python - 当您获得 oop 对象并需要特定属性信息时该怎么办
- listview - 创建具有可变行和列的检票口表
- reactjs - 如何转换在 ReactJS 的功能组件中扩展另一个类组件的类组件?
- r - 计算面板数据和线性概率模型的 ROC
- amazon-ec2 - 如何根据自定义标头值将 HTTP 流量分配到属于不同 EKS 集群(都在不同区域)的多个负载均衡器?
- html - 具有最大宽度的 CSS 网格单列
- swift - 向 CollectionView 两列结构添加全宽行
- flutter - flutter_inappwebview 如何将网站列表放入内容拦截器?
- ios - iPadOS 15 UITabBar 标题被截断
- javascript - 如何在多个子域上运行一段代码?