Sitecore - 如果用户使用外部身份提供商 (Salesforce SSO) 登录,如何获取用户 ID

Sitecore - How to get User ID if the user was logged in using external identity provider (Salesforce SSO)

我在 Sitecore 网站上的身份验证有点问题。基本上导航栏上有一个按钮,当用户单击该按钮时,它会将同一用户重定向到 Salesforce 以登录(SSO 的实现)。基本上,我将 Salesforce 用作 身份提供商 ,将 Sitecore 网站用作 服务提供商 。现在我有一个问题?登录用户后,如何获取该用户的 ID。 Sitecore User Manager 中的用户是否与 Salesforce 中的用户具有相同的 ID,或者我可以获得一封电子邮件来识别用户?

P.S:抱歉,如果这是一个非常愚蠢的问题,但在制作 Sitecore 网站和 SAML SSO 方面,我是初学者。提前谢谢你

暂时停止使用 Sitecore 和 Salesforce,您需要了解一些基础知识并在自动化之前手动点击登录过程。

您可能正在 Salesforce 中使用包含 OAuth2 配置的“连接的应用程序”(消费者密钥,也称为客户端 ID;秘密;范围列表,说明允许此应用程序代表此 SF 用户执行的操作; 允许的 url 列表,可以使用此用户密钥和密码登录。等等。)它甚至可能在页面底部有关于 Canvas 应用程序的内容。

接下来是 - 谁在登录。核心 Salesforce 用户或您是否有合作伙伴社区、客户社区(最近更名为“数字体验”)。

打开隐身模式 window 并转到 https://openidconnect.herokuapp.com/

对于登录主机,如果您有生产用户,则保持原样;如果您来自沙箱,则 test.salesforce.com(您也可以使用品牌 urls、mycompany--dev.my.salesforce.com 等) .如果您有社区用户,则必须将 url 更改为社区基础 url,例如 https://dev-mycompany.cs123.force.com/mycommunity

不要更改任何其他内容,单击下一步,下一步,下一步。这将引导您完成 OAuth2“web server flow”(许多登录方式之一)。您将 username/password 键入 SF 屏幕,然后使用“授权码”返回到该 herokuapp。该应用程序有几分钟的时间将该代码交换为实际的最终“访问令牌”并结合其他信息。此向导中的最后一步调用 OpenId“userinfo”- return 获取有关登录用户的一些信息。如果需要,您可以在此处提取电子邮件(如果有额外的字段,您希望 SF 到 return 在此过程中也是可配置的)

关闭该浏览器window。检查SF中的“连接的应用程序”。打开新的 incognito window,做同样的事情,但这次输入你的 url,消费者密钥和秘密(你可能必须先在 SF 中编辑应用程序以允许回调到 https://openidconnect.herokuapp.com/callback)。

那么现在你应该对整个登录过程有了大概的了解。您的 sitecore 应用程序可能做同样的事情,接收授权代码并将其交换为最终令牌。那时你有有效的 SF 会话 ID,你可以使用它来调用“用户信息”,运行 查询(如果应用程序允许 API 访问,检查“范围”)等

我怀疑 Sitecore 开发人员是手工创建的,您可能有一些 Spring 东西,例如 spring.security.oauth2.client...我的 Java 日子已经一去不复返了,但如果您变得更好在手动点击-点击-点击流程中,您应该能够遵循现有代码?

这是一个很大的话题,还有其他方法可以做到(other OAuth flows, sending info about the current user when you have external page embedded in SF as iframe, you'd need to read about "canvas apps")... but that's best guess based on info you provided. You might want to check some trailhead courses too like https://trailhead.salesforce.com/content/learn/projects/build-a-connected-app-for-api-integration/implement-the-oauth-20-web-server-authentication-flow

https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/intro_oauth_and_connected_apps.htm

https://developer.salesforce.com/docs/atlas.en-us.api_streaming.meta/api_streaming/code_sample_auth_oauth.htm(Java 但非常手工制作的原始 HTTP,可能 Spring 安全性更好)