问题标签 [msal.js]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
angular - MSAL.js protectedResourceMap - 需要说明将其设置为什么
我有 2 个站点,一个 Angular 应用程序和一个 WebAPI。
当我从前端使用 MSAL.js 调用 WebAPI 时,没有附加任何令牌(因为 CORS)。
我知道我需要设置 protectedResourceMap 但我找不到如何设置它的明确解释。
我可以找到很多例子,但没有一个给出有意义的解释(对我来说)。
任何人都可以提供任何意见吗?
msal.js - ServerError:AADSTS50058:已发送静默登录请求,但当前登录的用户均不匹配请求的登录提示“
SSO 失败“ServerError:AADSTS50058:已发送静默登录请求,但当前登录的用户均未与请求的登录提示匹配”,当我为工作帐户和个人 Azure 帐户使用相同帐户时。
我有 2 个 AAD 帐户(一个是我的工作帐户,另一个是个人帐户,但都附有相同的电子邮件,并且都使用相同的凭据)。当我使用 msal.js 库进行单点登录应用程序时。它会将我带到我的工作帐户,它要求我通过提供完整的电子邮件地址来验证凭据(使用标准弹出对话框),并且即使提供正确的凭据也无法正确验证。由于我需要使用我的个人帐户登录,我希望这应该使用我的广告 alias@company.com 凭据进行验证。我尝试在对话框中使用不同的帐户选项,但它失败并显示相同的完整电子邮件帐户。如何使用我的 adalias@company.com 作为默认用户 ID?
这是我尝试使用的一段代码。
这是我收到的错误消息:
ServerError:AADSTS50058:已发送静默登录请求,但当前登录的用户均不匹配请求的登录提示
预期结果是无缝登录到其他应用程序。
msal - 如果用户从 msal .net 代码登录,则无法使用 msal.js 静默获取访问令牌
我从 GitHub 下载了示例以试验 Azure AD B2C https://github.com/Azure-Samples/active-directory-b2c-dotnet-webapp-and-webapi
我已经为我的 AADB2C 重新配置了这个 Web 应用程序并且一切正常。
为了还试验 MSAL.js,我添加了一个新页面,该页面实现了登录用户的获取访问令牌。用户使用服务器端代码登录。但是,我无法为登录的用户获取缓存的用户会话,因为 MSAL.js 似乎不知道用户已经从服务器端代码登录,反之亦然。
这是我用来获取登录用户会话并尝试以静默方式获取令牌的代码。
即使用户已经使用 Microsoft.Identity Code (MSAL C# lib) 登录,msalInstance.getAccount() 函数也将始终返回 null。
如果用户使用服务端代码登录,是否可以静默获取访问令牌。
c# - 在 https://olb2c.b2clogin.com/olb2c.onmicrosoft.com/b2c_1_si_olp/v2.0/.well-known/openid-configuration 访问 XMLHttpRequest 时出现错误 404
我正在使用 MSAl-Angular 进行 B2C 登录,在重定向登录之前的某个时间,或者当它重定向回我的应用程序时,当库访问 Api 时会抛出错误。
https://olb2c.b2clogin.com/olb2c.onmicrosoft.com/b2c_1_si_olp/v2.0/.well-known/openid-configuration
但是当我使用浏览器正常访问端点时它工作正常。
或者如果硬刷新浏览器它有时工作正常。
这是 msal 模块配置。
azure-active-directory - 为什么 MSAL 返回的 JWT 令牌的 amr 字段有时会有 wia 或 mfa?
我有一个应用程序正在对 Azure AD 租户中的 MS Graph 进行身份验证,并且我正在使用 MSAL 来调用acquireTokenSilent
. 有时我的应用会收到一个 JWT 访问令牌,其中 amr 字段包含 mfa,具体来说:
这导致成功的 OBO 代币交换。
有几次我的应用程序收到了一个 JWT 访问令牌,其中 amr 字段包含 wia:
并尝试将此令牌交换为 OBO 令牌失败。
我没有在我的应用程序中对身份验证代码进行任何代码更改。导致acquireTokenSilent
行为差异的原因是什么?
谢谢!
编辑
该应用程序是一个使用 TypeScript 和 ReactJS 编写的 SPA。我们要求用户在加载任何内容之前使用 AAD 登录,并且应用程序loginRedirect
在 React 方法中调用我们的租户权限componentDidMount
来实现这一点。
当用户发起对授权源(我们编写的中间层服务)的调用时,应用程序调用acquireTokenSilent 以获取具有中间层服务配置API 范围的令牌。然后它调用我们的中间层服务并在标头中发送带有 Bearer 前缀的令牌。该服务将令牌交换为 OBO 令牌。
我们在 Azure 门户中有一个 AAD 应用注册,它已将 API 权限委派给 AAD Graph User.Read 和我们的中间层服务的配置 API。
中间层服务接收令牌(我们从应用程序acquireTokenSilent
调用中获得)并将其交换为 OBO 令牌,请求 MS Graph 和requested_token_use=on_behalf_of
.
当从 acquireTokenSilent 接收到的 JWT 访问令牌具有amr
包含 的字段wia
时,中间层服务上的令牌交换会收到有关需要 MFA 的条件访问声明质询的错误。
angularjs - 如何为自定义 B2C 邀请策略注册 MSAL JS 回调?
这个问题与这个问题有关:AngularJS hash #problem after Azure B2C Sign Up policy redirects to application
这是邀请自定义策略的详细信息:https ://github.com/azure-ad-b2c/samples/tree/master/policies/invite
Sign Up
邀请过程是通过电子邮件完成的,也就是说,用户没有使用应用程序并单击 SPA AngularJS 应用程序上的链接。
Sign In
效果很好,因为当用户在 AngularJS SPA 应用程序中时,他们会被重定向到策略Sign In
。当 MSAL JS 代码已配置时,他们实际上单击了一个按钮。
对于该Sign Up
策略,用户单击其电子邮件上的邀请链接,该链接将指向 B2CSign Up
策略。用户单击“创建”按钮,然后他们被重定向回主应用程序的根地址,并使用#id_token
来自 B2C 的发送,如下所示:
问题是 SPA 应用程序没有注册回调来处理来自 B2C 策略的重定向。
关于如何克服这个问题的任何想法?
office-js - 带有图形 api 的 Outlook Web 插件
我正在尝试制作 Outlook Web 加载项并希望在其中使用图形 api,因为在SSO 文章中他们提到了“AppSource 不接受使用 SSO 的加载项”。 想知道如何获取基于用户的图形令牌以访问 Outlook 插件中的图形 API。
我在这里使用 msal js auth flow 对用户进行身份验证链接。当此代码在 chrome 登录弹出窗口中运行时,浏览器会阻止并且在 IE/EDGE 登录弹出窗口中不会显示应有的跨域。
同样在 chrome 中允许弹出窗口后,我可以获得“Id Token”但acquireTokenSilent(requestObj)
没有给出任何响应。
是否有任何其他方法可以让我在 Outlook Web 插件中获取图形访问令牌。
最后是 AppSource 上的完整加载项部署过程。
typescript - 如何测试刷新和过期令牌场景?
我正在使用该msal.js
库对我的 AAD 帐户进行身份验证。我有处理实现令牌刷新的逻辑,但我不确定如何最好地手动测试它。
我能够使用system
配置验证令牌是否正确刷新,并将令牌更新偏移量设置为大于到期限制的值。
唯一不知道怎么测试的场景是token不能再刷新,InteractionRequiredAuthError
报错后用户需要重新登录。我真的希望我不必在 24 小时内保持会话处于活动状态,然后尝试刷新令牌......
azure-active-directory - 使用 msal.js 异步向租户权限和 Microsoft 个人帐户权限进行身份验证时出现 nonce_mismatch_error
我正在编写一个 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
类,以便我可以在不同的提供者中独立使用它们?
javascript - MSAL JS 在使用 acquireTokenSilent 函数更新 id 令牌时引发 multiple_matching_tokens_detected 异常
我在反应应用程序中使用MSAL进行身份验证。我使用 localStorage 作为 UserAgentApplication 实例的缓存存储。loginPopup 方法提供一个有效期为一小时的 idToken。出于我的应用程序的目的,我想在它过期时静默刷新这个 idToken。根据所有文档,如果令牌过期,acquireTokenSilent 函数将自动刷新令牌,否则如果客户端 ID 作为范围参数传递,则将提供缓存的令牌。
但是,我在调用 acquireTokenSilent 函数时遇到了以下异常。
令人惊讶的是,这个异常是在 chrome 上引发的,而不是在边缘浏览器上。文件系统中是否存储了任何浏览器特定的缓存?我已经清除了 chrome 中的 cookie 和本地存储数据,但没有任何帮助。
以下是一些负责任的代码片段:
};
};
首先,我尝试调用 getToken 函数,如果找不到令牌,那么我将用户重定向到使用登录函数的登录页面。请注意,我在这两种情况下都使用 idToken,但不是 accessToken。
非常感谢任何帮助以使这项工作在 chrome 中工作。