首页 > 解决方案 > Sitecore - 如果用户使用外部身份提供商 (Salesforce SSO) 登录,如何获取用户 ID

问题描述

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

PS:对不起,如果这是一个非常愚蠢的问题,但我是制作 Sitecore 网站和 SAML SSO 的初学者。先感谢您

标签: salesforcesingle-sign-onsitecore

解决方案


稍等一下 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_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 安全性更好)


推荐阅读