问题标签 [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.
angular - MSAL Angular MsalGuard 在令牌到期时配置本地存储清除
我正在对我们的 Angular 应用程序的 MSAL 实施进行 POC。
要求:用户必须每天登录一次。当他多次访问时,他将被直接带到应用程序,无需登录交互。身份验证流程仅用于身份验证而不是授权(不需要访问令牌)。
我已经设置了一个测试 Azure AD 帐户并向其中添加了 Angular 应用程序。我已经安装了@azure/msal-angular,并在 app 模块中进行了相同的配置,如下所示:
我添加了 MsalGuard 来保护我的路线。该设置适用于登录和注销流程。我面临的问题是一天结束时的自动注销。
该包将客户端信息存储在本地存储中的令牌中(这样公开信息是否安全?)。除非我明确调用,否则本地存储永远不会过期或被清除MsalService.logout()
。由于我使用的是测试帐户,因此令牌到期时间为 1H。当实际开发开始时,客户将在 AD 中配置到期时间以满足他们的需求。但是我需要弄清楚令牌过期后如何清除本地存储。有人可以帮忙吗?
azure-active-directory - MSAL - 使用 IneractionType.Redirect 时没有可用的令牌
在我们的应用程序中,我们使用 AAD 对用户进行身份验证,但我们使用本地 SQL 数据库中自己的 User 和 Role 表来授权用户。
使用旧的 ADAL 库,我们能够将用户返回到我们的回调 url,然后我们将从那里从 ADAL 服务获取 JWT 令牌,并将该令牌发送到我们的服务器。然后,服务器将验证令牌、对其进行解码并获取电子邮件地址。然后,我们使用 SQL 表返回另一个 JWT,其中包含用户的身份及其所有角色。
对于 MSAL,如果您使用 InteractionType.Popup ,这仍然有效。loginPopup() 方法的响应 Observable 带有 AuthentiationResult,它有一个 idToken 属性和一个 accessToken 属性。您可以轻松地抓住您需要的那个,然后您就可以参加比赛了。
但是,使用 InteractionType.Redirect 我们没有得到 AuthenticationResult。
我已将 msalService 实例注入到我们的 callbackURL 的组件(称为 AuthCallbackComponent)中。我在 msalService 中到处寻找令牌,但找不到它们。我什至查看了 sessionStorage,在那里我配置了 MSAL 来缓存令牌。它们实际上在那里(在几个非常时髦的键下),但直到后来。无论我使用 ngOnInit、ngAfterViewInit 还是 ngAftercontentInit,令牌都不存在。如果我将超时设置为 1-2 秒,它确实有效,但是......不。您永远不能真正依赖超时延迟对所有用户来说都足够长。
我们希望使用重定向工作流而不是弹出式工作流,因此如果我们可以从 MSAL 实例中获取 idToken,那将是理想的选择。
我在这里找到了这篇文章:Retrieve token using msal,它提供了一些可能的解决方案,但这些建议没有帮助。它谈到了一个自定义的 MSAL 拦截器,但这似乎是错误的。这通常是 HTTP 拦截器,它将您的令牌添加到服务调用的标头中。它还说您可以订阅回调并“使用返回的令牌做一些事情”,但假设它们是指 msalService.loginRedirect() 方法的回调,那是错误的。它根本不返回任何东西。
请记住,在旧的 ADAL 库中,这是有效的。而且它仍然适用于 InteractionType.Popup (我们不能使用)。我希望这些令牌必须在某处的 MSAL 实例中,否则我们可以覆盖一个方法,我们可以提供一个回调等。
感谢您阅读这篇较长的文章。
angular - 如何配置 msal-angular 拦截器以将访问令牌 (v2) 发送到自己的域 (self)
我从 v1 更新到 @azure/msal-angular v2。而且我不知道如何配置它以将访问令牌发送到托管在同一域上的后端。
因此,当我的前端发出请求时/api/foo
,MsalInterceptor
应该以版本 2 格式(而不是版本 1)附加我的访问令牌。
这使其发送版本 1 访问令牌
我设法通过添加来“欺骗”它
但随后 AzureAD 开始抱怨
AADSTS90009:应用程序正在为自己请求令牌。仅当使用基于 GUID 的应用标识符指定资源时才支持此方案
所以这不是一个选择。如何MsalInterceptor
将版本 2 访问令牌发送到/
?
msal-angular - 将 MSAL 用于 Angular 和 NGXLogger
我最近升级了我的 Angular 应用程序以将 MSAL 用于 Angular V2.X。 https://www.npmjs.com/package/@azure/msal-angular
我的应用程序使用 NGXLogger 进行日志记录。 https://www.npmjs.com/package/ngx-logger
当我运行我的应用程序时,我收到了这些错误:
和
注意:更新:Angular 的 MSAL 不使用 NGXLogger!看起来 MSAL for Angular 现在使用 NGXLogger。
我正在寻求有关如何解决问题的指导,以便 MSAL for Angular 和我的应用程序可以使用 NGXLogger。
.net - Office 365 - “535:5.7.3 身份验证不成功”
我正在使用 MSAL 库发送 O365 邮件。在前端(角度)生成访问令牌并将令牌传递给后端(.Net)以发送邮件。之后抛出异常“535: 5.7.3 Authentication unsuccessful”。但是,如果我在后端生成令牌并传递给发送邮件的代码,它就可以正常工作。
尝试{ var email1 = new MimeMessage();
angular - 如何将不同环境中的clientId传递给AppModule
我使用 msal 进行身份验证。在我的 AppModule.ts 中(来自示例)
对于clientId,我不想在这里硬编码。它在一个配置文件中。问题是我有不同的环境,例如 dev/qa 和 prod 等。每个端点的 clientId 都不同。
如何将值而不是硬编码传递给 AppModule?
angular - 角度 msal v2 缺少组声明
我希望将我的 Angular 应用程序从 MSAL v1 升级到 MSAL v2,我遇到的一个问题是警卫添加到请求中的 jwt 令牌不再包含group
有效负载中的字段。我们使用组成员资格来决定谁可以访问什么,所以这当然是一个很大的障碍。
是否有一些我缺少的客户端配置需要让组声明显示在 MSAL v2 的令牌中?我已经尝试了范围 openid、user.read 和 profile,不确定这是否是我应该寻找的地方。
组声明确实出现在 MSAL v1 令牌中,所以我假设 Azure 配置是有效的。
编辑:有人告诉我 v1 令牌似乎是一个 id_token,而 v2 令牌是一个 access_token。有没有办法让 v2 在使用 Guard 时发送 id_token 而不是 access_token ?
谢谢
javascript - BrowserAuthError:interaction_in_progress - 无法修复,无论找到什么解决方案
我正在为我现在工作的公司的应用程序实施安全性。我正在使用@azure/msal-angular@2.0.2
, @azure/msal-browser@2.16.1
。我按照此处找到的示例进行操作
,并使其适用于第一个应用程序。我继续为下一个应用程序实现它,它基本上是相同的,只是与不同的 api 对话,但复杂性是相同的。在可能做错事后,我不断收到错误消息:
我发现其他几个帖子说要清除缓存、存储等……但没有一个有效。它所做的只是提示我再次登录,只是用相同的条目填写 sessionStorage,其中包含msal.442edcf7-9e0c-469b-93fb-daa1839724bd.interaction.status
interaction_in_progress
. 据我所知,我已经尝试了所有我发现的东西。AzureAD 本身的解决方案也不起作用。
我对此很陌生,所以我可能错过了一些简单的事情,如果是这样,我很抱歉。
我的代码可以在下面找到。
角版
11.0.2
app.module.ts
app.component.ts
我真的很迷茫,不知道我做错了什么。据我了解,有一个登录过程被中断,可能是我离开登录屏幕,但现在我不知道如何“完成”或完成该过程。
更新
我尝试从工作应用程序中复制 LocalStorage 值,然后让它工作。刷新工作并且没有出现错误,但是当我注销并提示我再次登录并且我这样做之后,它又回到了开始。
解决方案更新
我已经有了突破。如果我将登录类型更改为 Popup 并以这种方式处理它,它是固定的。我可以毫无问题地登录和注销。但是,如果我将它改回重定向,它又会被破坏。所以现在我会把它放在 Popup 上。简单的解决方案,但我没有想到它,因为我认为问题也会在那里发生。
node.js - 在 microsoft-graph-client 中使用时,来自 msal-angular 的 v2 令牌上的 x5t 令牌无效
我在 Node.js 中使用 microsoft-graph-client。我正在使用 msal-angular 获取我的令牌并将它们传递给我的节点后端。令牌是 2.0 版访问令牌,因此令牌标头中没有“x5t”键,尽管我读过“孩子”键具有相同的用途。
在节点中,我能够初始化图形客户端,但是一旦我调用图形的“/me”端点,我就会收到一条错误消息,上面写着“无效的 x5t 声明”。
我必须确保我获得了用于 passport-azure-ad 的 2.0 版令牌来验证它们。
图形根本不能使用 2.0 版访问令牌吗?