我正在编写一个 Web 应用程序,它支持对租户的 Azure AD 身份验证以及个人 Microsoft 帐户身份验证,并为这两个身份验证提供程序请求访问 MS Graph。我在客户端上使用 msal.js 库来处理身份验证。
我经历过以下事情,这让我认为UserAgentApplication
msal 中的底层对象正在共享状态并阻止我与两个提供者进行异步身份验证。
背景:
我有一个AadAuthProvider
类,用于对租户权限进行身份验证。我有一个MsaAuthProvider
类,用于针对个人 Microsoft 帐户权限进行身份验证。这些类中的每一个都UserAgentApplication
用自己不同的Msal.Configurations
.
观察
- 尝试
Promise
从静默调用中返回 aAadAuthProvider.acquireToken
和Promise
从MsaAuthProvider.acquireToken
异步静默调用中返回 a 总是失败并返回 anonce_mismatch_error
:Nonce is not matching, Nonce received: e5xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, nonce expected : a7xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
- 大多数情况下,第一次调用会成功,第二次调用会失败
nonce_mismatch_error
。如果我正在调试,那么根据在各种断点处花费的时间,第一个或第二个将失败并显示nonce_mismatch_error
. - 如果我 await
AadAuthProvider.acquireToken
然后 awaitMsaAuthProvider.acquireToken
,则操作都成功。
令我感到意外的是,您不能通过 msal 库同时向不同的提供者进行多次调用。我希望UserAgentApplication
可以使用不同的配置多次实例化,并且 msal 的使用者可以独立地与它们交互。
有没有办法实例化UserAgentApplication
类,以便我可以在不同的提供者中独立使用它们?