如何通过Auth0 SSO实现Salesforce与Angular应用的单点登录集成
Salesforce Lightning + Auth0 + Angular SSO 免登跳转实现指导
核心逻辑
你当前的场景本质是复用Auth0的统一身份会话实现跨应用免登,不需要额外对接新的SSO协议,只需调整三方配置和Angular的登录校验逻辑即可完成。
分步实现要求
1. Salesforce 侧配置
- 配置Lightning应用内的自定义跳转入口,目标地址直接指向Angular应用的仪表盘路由,不要指向Angular的登录页
- 配置全局未登录拦截规则:所有未携带有效Salesforce会话的访问请求,直接重定向到Salesforce登录页
- 同步Salesforce会话有效期与Auth0侧会话有效期,避免两边会话过期时间不一致导致跳转失败
2. Auth0 侧配置调整
- 确认Salesforce应用和Angular应用已归属于Auth0同一租户下的同一用户池,共享用户身份数据
- 开启Auth0静默登录权限,允许同浏览器环境下的应用调用
checkSession接口获取当前登录态 - 把Angular应用的域名添加到Auth0的CORS允许列表、允许回调地址列表、允许Web源列表
- 配置Auth0会话Cookie的生效范围,确保同浏览器下Angular应用可以读取到Salesforce登录后生成的Auth0会话Cookie
3. Angular 应用改造
- 调整路由守卫的校验逻辑,优先调用Auth0 SDK的静默登录接口校验当前会话有效性
- 校验到有效会话时,直接读取会话内的用户信息,跳过登录路由直接放行到仪表盘页面
- 未校验到有效会话时,直接重定向到Salesforce登录地址,不要停留在Angular自身的登录页
- 在仪表盘页面增加二次身份校验逻辑,避免伪造会话导致的未授权访问
核心代码示例
Angular 路由守卫校验逻辑
import { Injectable } from '@angular/core'; import { CanActivate, Router } from '@angular/router'; import { AuthService } from '@auth0/auth0-angular'; import { tap } from 'rxjs/operators'; @Injectable({ providedIn: 'root' }) export class SsoAuthGuard implements CanActivate { constructor(private authService: AuthService, private router: Router) {} canActivate() { return this.authService.isAuthenticated$.pipe( tap(isLoggedIn => { if (!isLoggedIn) { // 无有效会话直接跳转Salesforce登录页 window.location.href = 'https://你的Salesforce实例地址/login'; } }) ); } }
Salesforce Lightning 跳转按钮逻辑
// 自定义Lightning组件的跳转方法 ({ jumpToAngularDashboard: function() { const targetUrl = 'https://你的Angular应用地址/dashboard'; window.open(targetUrl, '_blank'); } })
常见问题排查
- 静默登录返回无会话:优先检查Auth0的CORS配置是否完整,跨顶级域名场景需要开启Auth0的第三方Cookie支持
- 重定向死循环:检查路由守卫逻辑是否重复触发重定向,确认Auth0会话有效性判断逻辑正确
- 身份信息不匹配:确认Salesforce和Angular应用在Auth0侧使用的是同一用户标识字段,避免同一个用户在两个应用内识别为不同账号
内容的提问来源于stack exchange,提问作者Adnan Fayaz
相关产品推荐
相关产品推荐

