使用msal.js与租户权限和Microsoft个人帐户权限进行异步身份验证时出现nonce_mismatch_error

时间:2019-08-15 16:22:38

标签: azure-active-directory msal msal.js

我正在编写一个支持对租户的Azure AD身份验证以及个人Microsoft帐户身份验证的Web应用程序,并请求这两个身份验证提供程序都可以访问MS Graph。我正在使用客户端上的msal.js库来处理身份验证。

我经历了以下事情,使我认为msal中的基础UserAgentApplication对象正在共享状态,并阻止我与两个提供者进行异步身份验证。

背景

我有一个AadAuthProvider类,用于根据租户权限进行身份验证。我有一个MsaAuthProvider类,该类用于根据个人Microsoft帐户授权进行身份验证。 每个此类都使用各自不同的UserAgentApplication实例化自己的Msal.Configurations对象。

观察

  1. 尝试以静默方式调用Promise返回AadAuthProvider.acquireToken并以静默方式调用Promise来返回MsaAuthProvider.acquireToken总是失败,并返回nonce_mismatch_error:{{1} }
  2. 大多数情况下,第一次呼叫成功,而第二次呼叫失败的原因是Nonce is not matching, Nonce received: e5xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, nonce expected : a7xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.。如果我正在调试,则根据在各个断点花费的时间,第一个或第二个将失败,并显示nonce_mismatch_error
  3. 如果我等待nonce_mismatch_error然后等待AadAuthProvider.acquireToken,则操作均成功。

令您惊讶的是,您无法同时通过msal库多次调用不同的提供程序。我希望MsaAuthProvider.acquireToken可以使用不同的配置多次实例化,并且msal的使用者可以独立地与其交互。

是否可以实例化UserAgentApplication类,以便可以在不同的提供程序中独立使用它们?

1 个答案:

答案 0 :(得分:0)

您可以使用“ https://login.microsoftonline.com/common”作为权限。它支持工作帐户和Microsoft个人帐户。有关更多详细信息,请参阅https://docs.microsoft.com/en-us/azure/active-directory/develop/msal-js-initializing-client-applications#configuration-options