gpt4 book ai didi

angular - 使用 Angular 2+ 并处理 iFrame 的 ADAL/MSAL JS 库

转载 作者:行者123 更新时间:2023-12-02 16:09:27 24 4
gpt4 key购买 nike

我正在开发 Angular (7.0) SPA 应用,希望实现 Azure AD 登录以实现身份验证和授权功能,并使用 .NET Core 2.1 API。

Angular 应用程序(目前)由 3 个组件组成 - 主页、登录和重定向。

  • 主页组件受 Route Guard 保护 - 如果用户未登录他被重定向到登录组件。

  • 登录组件检查用户是否已登录 - 如果没有登录,他将被重定向用户访问 Microsoft 登录页面。

  • 如果登录成功,他会被重定向到重定向组件,然后该组件会将用户发送到默认页面,即主页。

到目前为止,一切都运行得很好,没有任何问题。当我尝试获取 .NET Core API 的访问 token 时,问题开始出现。

adal-Angular4

//HTTP Interceptor
this.adal.acquireToken(resource) ...

@azure/msal-Angular

//HTTP Interceptor
this.msal.acquireTokenSilent(scopes) ...

虽然我获取 token 并且 HTTP 拦截器附加不记名 token 没有任何问题,但当执行这些函数时,它们创建应用程序的新实例

<html>
<head>...</head>
<body>
<app-root>...</app-root>
<script type="text/javascript" src="runtime.js"></script>
<script type="text/javascript" src="polyfills.js"></script>
<script type="text/javascript" src="styles.js"></script>
<script type="text/javascript" src="vendor.js"></script>
<script type="text/javascript" src="main.js"></script>
<iframe id="msalRenewFramehttps://address.net/.../..." src="https://login.microsoftonline.com/...">
<html>
<head>...</head>
<body>
<app-root>...</app-root>
<script type="text/javascript" src="runtime.js"></script>
<script type="text/javascript" src="polyfills.js"></script>
<script type="text/javascript" src="styles.js"></script>
<script type="text/javascript" src="vendor.js"></script>
<script type="text/javascript" src="main.js"></script>
</body>
</html>
</iframe>
</body>
</html>

这意味着,如果我在主页上有某种在构造函数中启动的后台运行任务,则两个实例都将开始运行这些任务并访问服务器。

说到ADAL.JS,有two suggestions as to how to fix the issue ,但是它们都不适用于 Angular 2+。

一个可能的解决方案是每次获取/更新 token 时从 HTML 中删除 iframe,但这感觉是一个非常糟糕的解决方案。

我 100% 确定 Azure 门户和 Angular 应用上的重定向地址是正确的。

上周一直在努力解决这个问题。任何帮助将不胜感激。

最佳答案

我花了太多时间调查这个问题。 @azure/msal-angular 尚未准备好,并使用旧版本的 msal 这会导致很多问题。所以我们决定直接使用msal,自己实现guard和HTTP拦截器。

通过转移到 msal,我们能够在自己的 HTML 文件中提取登录后重定向页面,如下所示:

<script type="text/javascript" src="https://alcdn.msauth.net/lib/1.2.1/js/msal.js"
integrity="sha384-9TV1245fz+BaI+VvCjMYL0YDMElLBwNS84v3mY57pXNOt6xcUYch2QLImaTahcOP" crossorigin="anonymous"></script>
<script>
new Msal.UserAgentApplication({ auth: config })
.handleRedirectCallback((err, res) => {
if (err) {
console.error(err);
return;
}
});
</script>

此后,由于 iframe 中的应用程序重复,我们不再重新加载 bundle 。而且身份验证流程要快得多。

关于angular - 使用 Angular 2+ 并处理 iFrame 的 ADAL/MSAL JS 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53965678/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com