【问题标题】:Using Angular Msal in integrated .NET application在集成的 .NET 应用程序中使用 Angular Msal
【发布时间】:2021-12-23 16:39:34
【问题描述】:

目前,我正在开发一个将 Angular 构建与 .NET 应用程序集成在一起的应用程序。我使用从 Angular 应用 (Angular msal) 到 Web 服务器的 Azure AD 身份验证。

定位静态网页应用

services.AddSpaStaticFiles(configuration =>
        {
            configuration.RootPath = "ClientApp/dist";
        });

使用水疗中心:

 app.UseSpa(spa =>
        {
            // To learn more about options for serving an Angular SPA from ASP.NET Core,
            // see https://go.microsoft.com/fwlink/?linkid=864501

            spa.Options.SourcePath = "ClientApp";

            if (env.IsDevelopment())
            {
                spa.UseAngularCliServer(npmScript: "start");
            }
        });

错误

AADSTS9002326: Cross-origin token redemption is permitted only for the 'Single-Page Application' client-type.

在我开始集成之前,这两个应用程序是独立存在的,并且身份验证运行良好。但由于集成,SPA 现在以 .NET 作为主机作为静态应用程序运行。

现在我怀疑 SPA 不再被识别为 SPA,而只是作为 .NET 应用程序,因此我的身份验证不再有效。

我一直在使用标准指南来集成我的 SPA,并且代码似乎可以按预期工作。只有身份验证不起作用,因为我认为我的应用注册返回 url 不会导致 SPA。

有什么解决办法吗?我可以想象身份验证现在应该在 .NET 托管端工作,但如果我这样做,我可能会丢弃我所有的 msal 实现。我不是在等那个。

注意: 应用程序不再在默认的 Angular 端口 4200 上运行,而是在启动设置中定义的端口上运行。

谢谢。

【问题讨论】:

  • 确保在用代码交换令牌时没有向服务器发送“Origin”标头。
  • 详情请参考MS Q&A和github。
  • @Giovanni - 你找到解决这个问题的方法了吗?我也遇到了同样的问题。

标签: c# .net angular azure single-page-application


【解决方案1】:
  • 检查 Manifest 文件中的 URI 类型为 Spa 而不是 Web。
  • 即使您已将身份验证中的平台设置为单页应用程序,URI 类型仍可能设置为 Web,这将导致此错误。
  • 更改应用注册->身份验证->平台类型应该是SPA而不是Web。
  • 如果您将清单中的 redirectUri 类型从“Web”更改为“Spa”,则会返回访问令牌!

【讨论】:

  • 不幸的是,这没有帮助。我的配置已经很好了,因为我把项目分开了,它就像一个魅力。我不知道如何让他们一起工作。
猜你喜欢
  • 1970-01-01
  • 2018-09-30
  • 2019-11-14
  • 2022-07-20
  • 2019-09-25
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
相关资源
最近更新 更多