azure-ad-b2c - 如何刷新 Azure AD B2C (Angular) SPA 会话数据?
问题描述
场景:
我通过 Angular 应用程序中的 AD B2C 帐户登录。我集成了 msal-browser (^2.15.0) 和msal-angular (^2.0.1),用于身份验证和访问会话数据。
我使用 Graph API(来自我的 .NET 服务器)从我的 Angular 应用程序更新我的 AD B2C 用户记录。
要求:
每当我通过 Angular 应用程序中的 Graph API(间接通过我的服务器)更新用户记录时,我希望我的浏览器会话也能反映这些更改。
// user-data.service.ts
public updateUserRecord(userUpdateObj: CustomUserModel) {
this.http.put("https://my-server-calling-graph-api.com/user-data", userUpdateObj ,this.HTTP_OPTIONS)
.pipe(
map((updatedResult: CustomUserModel) => {
console.log('Updated User Record -> ', updatedResult);
// SESSION DATA
this.usersList = this.msalService.instance.getAllAccounts();
this.msalService.instance.setActiveAccount(this.usersList[0]);
const userCustomAttributes = this.usersList[0].idTokenClaims;
console.log('Existing User Record -> ', userCustomAttributes);
}),
retry(2)
);
} // FN
问题:有没有办法通过任何 msal 服务调用在后台静默更新会话数据,或者我应该重定向到登录以重新接收会话数据?
解决方案
实现这一点的唯一方法是调用acquireTokenRedirect()
或ssoSilent()
MSAL 方法。这些使用基于 cookie 的登录,然后将重新处理用户旅程并获取最新数据。ssoSilent()
发生在隐藏的 iframe 中。您可能会发现,由于复制延迟,这仍然不能可靠地工作。
为避免此问题,最终用户可以使用Edit Profile flow编辑其用户配置文件。这将是推荐的路径。
推荐阅读
- xamarin - Xamarin 形成带有可见后退按钮的透明导航栏
- javascript - 如何在 HTML5 画布上绘制 Javascript 修改的 SVG 对象?
- algorithm - 快速增加和减慢达到预定义最大值的功能
- python - 如果数据库中不存在项目,如何在解析上传的 csv 文件后重定向到表单?
- python-3.x - 文件处理程序的动态文件名
- node.js - 如何在 Firebase 控制台上部署 ionic 4 应用程序?
- excel - 使用批处理脚本从 excel 转换为 csv 时出现错误的日期格式
- python - Plotly 无法正确显示 y 轴标签
- javascript - 如何使用 superagent 发送 FormData 对象
- css - 你怎么把div放在右边