Sitecore通过Salesforce外部身份提供商SSO登录后如何获取用户ID
Sitecore 集成 Salesforce SSO 问题解答
问题1:用户完成SSO登录后如何获取对应用户ID
你可以根据调用场景选择两种获取方式:
- 登录流程中(SAML断言处理阶段):Salesforce作为IdP返回的SAML响应断言里默认携带用户唯一ID属性,你可以在Sitecore SAML中间件的声明映射配置里,将Salesforce的
UserId字段映射为固定的声明类型,比如常用的nameidentifier,后续可直接通过声明上下文读取:// 读取当前登录用户的Salesforce用户ID var sfUserId = System.Security.Claims.ClaimsPrincipal.Current .FindFirst("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier")?.Value; - 登录完成后(业务代码调用阶段):如果已经配置了SSO登录时自动将Salesforce用户ID写入Sitecore用户配置的自定义属性,可直接通过Sitecore上下文读取:
var sfUserId = Sitecore.Context.User.Profile.GetCustomProperty("SalesforceUserId");
问题2:Sitecore用户管理器ID和Salesforce用户ID是否一致,能否仅用邮箱标识用户
- 两者默认不一致:Sitecore用户管理器的用户ID默认采用
[域名]\[用户名]的格式,比如extranet\zhangsan@demo.com,是Sitecore侧生成的标识,和Salesforce侧原生的18位全局唯一用户ID没有关联,除非你在SSO配置中特意指定将Salesforce用户ID作为Sitecore用户名生成的规则,才会实现两者对齐。 - 不建议仅使用邮箱作为用户唯一标识:原因如下:
- Salesforce支持用户修改邮箱地址,一旦邮箱变更,用邮箱匹配会导致无法关联到原有Sitecore账号,出现重复创建账号的问题
- 存在邮箱复用的可能性(比如用户注销后邮箱被分配给其他新用户),标识稳定性远低于Salesforce提供的永久不变的用户ID,推荐始终将Salesforce侧的用户ID作为两边账号匹配的唯一键,邮箱仅作为补充信息使用。
内容的提问来源于stack exchange,提问作者Samke11
相关产品推荐
相关产品推荐

