我正在使用MSAL库在Angular5应用程序中对Azure B2C进行身份验证 . 我将MS和Google帐户以及本地电子邮件配置为提供商,他们都很乐意获得初始令牌 . 然后通过JWT提供程序nugget包对我的dotnet核心WebAPI后端起作用 .

我'm not sure how I' m意味着更新令牌,但调用MSAL库的 acquireTokenSilent 函数会导致Microsoft和Google提供商令牌重定向回Azure然后再返回我的应用程序(在SPA应用程序中不可取) . 本地电子邮件会抛出一个关于州的错误,但是并没有那么担心 .

许多示例应用程序都说Silent renewing of access tokens is not supported by all social identity providers,但没有详细说明哪些应用程序......

有没有一种方法可以使用MSAL在没有完全重定向的情况下获得针对B2C的替换令牌?

this.app.acquireTokenSilent(this.config.b2cScopes)
      .then((newToken) => {
        if (newToken) {
          console.log(`got new token ${token}`);
          return newToken;

        }
        else {
          console.log('went bang');
          //presumably this blewup...
        }
      })
      .catch((fail) => {
        console.error(fail);
      });

调用此函数会导致重定向 . 最初,这请求 login.microsoftonline 获取open-id配置 . 然后它要求
https://login.microsoftonline.com/te/{tenant}/{policy}/oauth2/v2.0/authorize?response_type=token&scope={url + scope name} openid profile&state=9c23e002-a07c-4adb-a7fd-db5400f2b8ee&nonce=0ed5c352-d363-4e5e-bd40-4dc10936361f&client_info=1&x-client-SKU=MSAL.JS&x-client-Ver=0.1.5&client-request-id=3889aaeb-4b47-4726-9ef0-e4e3c73ea1e5&prompt=none&domain_req=ba2006a0-9352-424d-81b5-f2df33157082&login_req=213613d5-8217-4db9-8419-60441a5b512f-b2c_1_signup&domain_hint=organizations

哪个302周围的 login.live.com 带有响应 JavaScript required to sign in . 然后,我被丢弃回我的应用程序,没有新的令牌,也没有真正的想法为什么它的不安除了怀疑正在使用错误的流程和B2C试图通过交互路线获得新的令牌 .

范围方面,B2C租户默认配置了 openidoffline_access ,并且针对应用程序 user_impersonation (默认存在)和一个名为 read 的新范围 . 我正在请求 this.config.b2cscopes 发送这些范围 . openidprofile MSAL似乎自行添加 .