我正在编写一个支持对租户的Azure AD身份验证以及个人Microsoft帐户身份验证的Web应用程序,并请求这两个身份验证提供程序都可以访问MS Graph。我正在使用客户端上的msal.js库来处理身份验证。
我经历了以下事情,使我认为msal中的基础UserAgentApplication
对象正在共享状态,并阻止我与两个提供者进行异步身份验证。
背景:
我有一个AadAuthProvider
类,用于根据租户权限进行身份验证。我有一个MsaAuthProvider
类,该类用于根据个人Microsoft帐户授权进行身份验证。
每个此类都使用各自不同的UserAgentApplication
实例化自己的Msal.Configurations
对象。
观察
Promise
返回AadAuthProvider.acquireToken
并以静默方式调用Promise
来返回MsaAuthProvider.acquireToken
总是失败,并返回nonce_mismatch_error
:{{1} } Nonce is not matching, Nonce received: e5xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, nonce expected : a7xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
。如果我正在调试,则根据在各个断点花费的时间,第一个或第二个将失败,并显示nonce_mismatch_error
。nonce_mismatch_error
然后等待AadAuthProvider.acquireToken
,则操作均成功。令您惊讶的是,您无法同时通过msal库多次调用不同的提供程序。我希望MsaAuthProvider.acquireToken
可以使用不同的配置多次实例化,并且msal的使用者可以独立地与其交互。
是否可以实例化UserAgentApplication
类,以便可以在不同的提供程序中独立使用它们?
答案 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