首页 > 解决方案 > 如何刷新 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 服务调用在后台静默更新会话数据,或者我应该重定向到登录以重新接收会话数据?

标签: azure-ad-b2cmsalmsal-angular

解决方案


实现这一点的唯一方法是调用acquireTokenRedirect()ssoSilent()MSAL 方法。这些使用基于 cookie 的登录,然后将重新处理用户旅程并获取最新数据。ssoSilent()发生在隐藏的 iframe 中。您可能会发现,由于复制延迟,这仍然不能可靠地工作。

为避免此问题,最终用户可以使用Edit Profile flow编辑其用户配置文件。这将是推荐的路径。


推荐阅读