问题标签 [msal-angular]

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.

0 投票
1 回答
308 浏览

azure - Msal-Angular v1-acquireTokenPopup/LoginPopup 返回一个权限不足的访问令牌,即使在授予管理员同意后也是如此

在首次授予管理员同意时,我们收到了一个无效的 accessToken,其范围为空。如果用户再次重试——我们调用acquireTokenPopup 并且accessToken 变为有效。

在此处输入图像描述

复制步骤

第 1 步:管理员点击登录按钮 (loginPopup)

第 2 步:MS 提示登录和管理员同意页面(我们需要 User.Read.All)

第三步:我们调用acquireTokenSilent()来获取Access Token作为我们Graph Client的AuthenticationProvider

第 4 步:Graph API /users 请求返回 403 - 权限不足

核心库:@azure/msal 或 msal

核心库版本:1.4.8

包装库:@azure/msal-angular

包装器库版本:1.1.2

角度:7

我在这里创建了一个 GitHub 问题票:https ://github.com/AzureAD/microsoft-authentication-library-for-js/issues/3524

0 投票
1 回答
4804 浏览

angularjs - 不使用 acquireTokensilent 获取令牌,但使用 acquireTokenpopup Msal-browser 获取令牌

我正在更新 MSAL 版本 1.x 到 MSAL 浏览器的角度。所以我试图从版本 1.x 迁移到 2.XI 能够成功替换代码并且它工作正常。但是我遇到了acquireTokenSilent的问题,但是使用acquireTokenPopup可以正常工作。我正在关注此链接: https ://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/v1-migration.md 。这是仅在 11 天前发布的最新库,除了基本文档之外,我无法从互联网上获得太多输入。问题是当我使用acquireTokenSilent时,它给出的错误为: getTokenerror BrowserAuthError:no_account_error:没有提供给acquireTokenSilent的帐户对象并且没有设置活动帐户 但如果我在同一个地方使用acquireTokenPopup,我的应用程序正在工作。样本:

但是如果我使用acquireTokenPopup,而不是acquireTokenSilent,它的工作正常我没有得到什么问题。

0 投票
1 回答
1802 浏览

angularjs - 如何在 MSAL 浏览器中使用来自 acquiretoken 静默的刷新令牌

我试图在登录后通过 aquiretokensilent 获取令牌,然后必须在多个模块中进行授权。作为 MSAL 浏览器的文档,acquiretokensilent 将自动处理刷新令牌。在网络选项卡中,我也可以看到刷新令牌。但是如何使用它,它会自动替换访问令牌还是我需要做一些额外的事情,以及如何在访问令牌到期后看到控制台中的刷新令牌转换为访问令牌。我已经阅读了很多文档,但不清楚如何用它。 在此处输入图像描述

0 投票
1 回答
97 浏览

c# - 如何诊断 Microsoft 身份验证失败?

我有一个受 Azure 身份验证保护的 ASP.NET Core 3.1 Web API 应用程序。我还有一个调用 Web API 的 Angular 11 应用程序。

它们在我们的集成环境中运行良好。但在测试环境中身份验证失败。

Angular 应用程序使用 msal-angular 库进行了很好的身份验证,它获取访问令牌并在调用 Web API 时包含它。但是 Web API 无法从不记名令牌中检索身份。

在多次删除并重新创建(前端和后端)Azure APP 注册并重新配置它们后,身份验证仍然失败。我不知道是什么原因,所以这就是为什么我需要诊断它。

我已启用JwtBearerMiddlewareDiagnosticsEvents,并且可以在日志中看到“Begin OnAuthenticationFailedAsync”和“End OnAuthenticationFailedAsync”。但这还不够信息。它不再告诉您事件已引发,也没有其他信息。

我已阅读以下有关文档的文章,该文章告诉您如何在 MSAL.NET 中配置日志记录,但我认为它不适用于 Web API。

https://docs.microsoft.com/en-us/azure/active-directory/develop/msal-logging-dotnet

所以问题是:我怎样才能找出身份验证失败的原因?有没有办法记录原因?

更新:

我更近了,我将日志级别设置为跟踪,现在我在 asp.net core web api 应用程序的日志中看到以下内容:

IDX10511:签名验证失败。尝试的键:'[PII 被隐藏。有关更多详细信息,请参阅 https://aka.ms/IdentityModel/PII.]'。\nkid: '[PII 被隐藏。有关更多详细信息,请参阅 https://aka.ms/IdentityModel/PII。]

更新:

我收到以下错误:

承载未通过身份验证。失败消息:IDX10214:观众验证失败。观众:'242e8f40-d795-43bc-8ac8-8eed3df71745'。不匹配:validationParameters.ValidAudience: 'b99e89fc-8a1c-4605-8c18-796d7064037e' 或 validationParameters.ValidAudiences: 'null'。

'242e8f40-d795-43bc-8ac8-8eed3df71745' 是 Web api 应用程序注册清单上的 AppId。

'b99e89fc-8a1c-4605-8c18-796d7064037e' 是 Web api 注册的客户端 ID。

范围是'api://242e8f40-d795-43bc-8ac8-8eed3df71745/api-access'。

这就是我设置范围的方式:

0 投票
1 回答
795 浏览

angular - Teams 桌面应用程序中的 MSAL v2 角度问题

我们在 MS Teams 桌面和移动应用程序中的 Web 应用程序(node.js + angular 10)面临 AAD 登录问题,而我们的用户通过单击任何 Web 浏览器或 MS Teams Web 客户端中的登录按钮轻松登录。

在 Angular 中,我们使用两个库(@azure/msal-browser msal 和 @azure/msal-common)并通过登录我们的应用程序使用 AAD 图形工具包。

在登录页面中,我们只是通过一个简单的登录按钮调用登录组件。我们将 Angular Web 应用程序添加为 MS Teams 的个人选项卡/应用程序。当用户在 Microsoft Teams 桌面应用程序中单击它时,我们在控制台中遇到以下错误消息:

我们假设 Teams Desktop 选项卡无法打开我们的身份验证机制,因为我们无法在函数下方添加代码:

这是来自团队 SDK javascript,我们没有弄清楚如何在 Angular 10 结构中使用此函数,我们无法从 Angular 中的任何包中调用该函数。

Angular 10 应用程序是否有解决方法来利用诸如 microsoftTeams.authentication.authenticate 之类的功能?ms团队等的任何打字稿包?

我们是否必须使用 React 创建一个外部 Teams-spesific-login 流应用程序(如这些代码:https ://github.com/AzureAD/microsoft-authentication-library-for-js/issues/2531#issuecomment-770110059 )和调用 ms 团队 js sdk 包以通过此 React 应用程序对用户进行身份验证,然后最终使用获得的令牌将用户重定向到我们的 Angular 10 应用程序?对于这种情况,这种方法是最好的情况还是最好的解决方法?

是否有任何方法可以仅在一个 Angular 10 独立应用程序和一种登录机制中继续使用浏览器、团队桌面应用程序、团队移动应用程序?我找到了这个主题(https://github.com/OfficeDev/microsoft-teams-library-js/issues/90),但不知道如何使用它来解决我的问题。

0 投票
1 回答
197 浏览

angular - 将 AD B2C 和 MSAL v2 与 Angular 结合使用,允许选择性的不受保护的 Web API 调用

我的目标是允许用户自由浏览 Angular 11+ 站点,在导航时读取从 .NET Web API 调用的数据。只有希望发布数据或访问特定功能的用户才需要使用 AD B2C 身份服务进行注册和登录。相应地,后端应用服务中的控制器被适当地标记为 [Authorize] 或 [AllowAnonymous]。

该站点成功地支持登录用户的浏览和发布,复制了AzureAD 示例中的方法。

然而,使用这种方法,Msal 的 httpInterceptor 显然会在每次数据库调用时触发,从而在所有端点上强制执行 B2C 注册/登录事件,从而挫败支持匿名浏览的努力。

MSAL v1 显然支持 unprotectedResource 数组,但对于 v2 已弃用。它显然也支持使用空模式,例如

由于该 v1 对象具有不同的形状,我在 v2 中尝试过这种方式,但无济于事

我尝试了其他方法,例如专门为需要授权的控制器设置 protectedResourceMap。那也失败了。

实现这一目标的正确方法是什么?

0 投票
0 回答
97 浏览

angular - MSAL Angular:客户端无效。请求正文必须包含以下参数“client_assertion”或“client secret”

我正在开发 Angular 项目并使用 MSAL 进行 Azure 身份验证。

它适用于 Angular 10 和 MSAL 版本 V1,但不适用于 Angular 11 和 MSAL v2。

获取无效客户端。请求正文必须包含以下参数“client_assertion”或“client secret”错误作为未经授权的响应。

下面的代码添加了\
`export function MSALInstanceFactory(): IPublicClientApplication { return new PublicClientApplication({ auth: {

}); }`

0 投票
1 回答
371 浏览

angular - 令牌调用在隐藏的 iframe Angular 8+ 中被阻止

我有具有上述配置的 Angular 应用程序。我正在使用 msal-angular 库中的 MsalInterceptor。在微软窗口登录后,我被重定向到我收到错误的应用程序:“令牌调用在隐藏的 iframe 中被阻止”,之后又出现“令牌更新因超时而失败”。问题在于acquireTokenSilent 方法失败。我看到更多的人有这个问题,这在这里描述:https ://github.com/AzureAD/microsoft-authentication-library-for-js/issues/1194 。即使用户在 localStorage 中有令牌,也存在此错误。我认为这可能只是警告,我可以捕获错误并充当已登录的用户,但没有,因为某些用户实际上没有令牌,然后是应用程序迷恋。有没有人遇到过类似的问题并处理过?

0 投票
2 回答
1719 浏览

angular - 模块中的 Angular APP_INITIALIZER 无法正常工作

我有 auth 模块,它在应用程序初始化之前导入和设置 msal 配置。我正在使用 APP_INITIALIZER 来阻止应用程序的初始化并获取 MSAL-ANGULAR 的配置。问题仅在于 Firefox。该应用程序在 Chrome、Egde、Safari 上运行良好,但在 Firefox 上运行不正常。在不同于 Firefox 的所有其他浏览器上,APP_INITIALIZER 会阻止启动,直到加载 config.json。我注意到 MSALInstanceFactory 在 initializerFactory 函数之前被调用。

我在 auth.module 中使用的代码

ConfigService 中的代码

app.module 中的代码

0 投票
0 回答
211 浏览

angular - 以角度方式升级到 msal v2 后,我收到此错误 crbug/1173575, non-JS module files deprecated

我正在尝试将 msal 版本更新为 2.0.0。所有配置完成。

我正在使用 Angular 版本 10,并且在构建 Angular 应用程序时使用以下命令,因为我没有使用根路径

应用程序在此 url 中运行良好www.test.com/mywebsite。但是登录后它会将我重定向到

https://www.test.com/abc代替www.test.com/mywebsite/abc

我在控制台上看到了这个错误。

VM8:2759 crbug/1173575,非 JS 模块文件已弃用。

请让我知道如何解决此问题。

请有我的 package.json