在Optimizely CMS 12中使用AAD SSO时能否启用用户通知框架?
在搭配Azure AD SSO的Optimizely CMS 12中启用用户通知框架的解决方案
问题根源
启用Azure AD(Entra ID)SSO后,通知无法显示的核心原因是用户标识不匹配:
- 未启用SSO时,通知框架依赖本地系统用户名关联用户;
- 启用SSO后,登录用户的身份标识为Entra ID的UPN(
firstname.lastname@yourdomain.com),但通知发送或框架配置未同步使用该标识,导致无法匹配到对应用户。
解决方案
1. 发送通知时使用正确的用户标识
发送通知必须以用户的User.Identity.Name(即AAD UPN)作为接收方标识,而非本地用户名。示例代码如下:
var notificationService = ServiceLocator.Current.GetInstance<INotificationService>(); var recipient = new UserNotificationRecipient("firstname.lastname@yourdomain.com"); // 传入AAD UPN var notification = new NotificationMessage { Subject = "外部系统通知", Body = "这是一条来自外部系统的测试通知", Type = NotificationType.Information }; await notificationService.SendAsync(notification, recipient);
2. 配置AAD身份验证映射UPN为用户标识
在Startup.cs中调整OpenID Connect配置,确保User.Identity.Name被设置为AAD用户的UPN:
services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureAd")) .EnableTokenAcquisitionToCallDownstreamApi() .AddInMemoryTokenCaches(); // 强制将UPN作为用户身份标识 services.Configure<OpenIdConnectOptions>(OpenIdConnectDefaults.AuthenticationScheme, options => { options.TokenValidationParameters.NameClaimType = "upn"; });
3. 验证CMS用户标识一致性
进入Optimizely CMS后台的用户管理界面,确认通过AAD同步的用户的用户名字段与UPN完全一致(格式为firstname.lastname@yourdomain.com)。若不一致,需调整用户同步逻辑,确保两者匹配。
额外排查步骤
- 检查Optimizely通知存储表(
tblNotification),确认Recipient字段存储的是正确的UPN值,且与登录用户的User.Identity.Name完全匹配(注意大小写一致性); - 确认AAD用户拥有Optimizely系统的通知接收权限(默认权限已启用,可在CMS权限设置中验证)。
内容的提问来源于stack exchange,提问作者Andvik
相关产品推荐
相关产品推荐

