C# Azure Ad身份验证不适用于具有angular 5.2新模板的新asp.net core 2.1。因为我们不在新模板中路由到主控制器

C# Azure Ad身份验证不适用于具有angular 5.2新模板的新asp.net core 2.1。因为我们不在新模板中路由到主控制器,c#,jquery,angular,visual-studio-2017,asp.net-core-2.1,C#,Jquery,Angular,Visual Studio 2017,Asp.net Core 2.1,我们已经将带有angular 4.3的.net core 2.1迁移到带有angular 5.2的.net core 2.1 现在我们无法从startup.cs执行azure ad身份验证,因为MapRoute定义发生了更改。仅供参考 以前的: app.UseMvc(routes => { routes.MapRoute( name: "default",

我们已经将带有angular 4.3的.net core 2.1迁移到带有angular 5.2的.net core 2.1

现在我们无法从startup.cs执行azure ad身份验证,因为MapRoute定义发生了更改。仅供参考

以前的:

app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });
最新:

app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller}/{action=Index}/{id?}");
            });

以前我们在身份验证后导航到home controller和index.cshtml。但现在新模板中没有.cshtml

这可能是因为回复URL

执行身份验证时,用户将重定向到回复URL。 此URL在AAD中配置

您可能已在不包含任何控制器或操作的回复URL中配置了应用程序的根URL。这就是为什么应用程序不能将请求路由到任何地方

您可以在Azure门户中验证这一点

编辑: 根据您的评论,我建议您检查是否使用了“UseDefaultFiles”

UseDefaultFiles尝试查找名为“Default”或“Index”的页面。但如果这些名称的页面不可用,则需要编写自定义逻辑

假设您希望将“mydefault.html”作为默认文档,那么逻辑如下所示

参考


我在将我的应用程序从angular 5/.Net Core 2.0迁移到angular 7/.Net Core 2.2时遇到了完全相同的问题,我找到了一种保持身份验证服务器端的方法。 解决方案是添加一个中间件,检查每个请求是否都经过身份验证,如果不是,则强制执行

        app.Use(async (context, next) =>
        {
            if (!context.User.Identity.IsAuthenticated)
            {
                await context.ChallengeAsync();
            }
            else
            {
                await next();
            }
        });

实际上,它不会进入Microsoft登录页面,因为新模板已更改。以前我们使用index.cshtml。但现在新模板中没有可用的视图。我认为根据新模板,我们只需要在客户端编写身份验证。正在等待回复。我希望您在启动配置方法中使用了app.UseDefaultFiles()。如果未指定页面,此方法将查找名为“Default”或“Index”的页面。但是如果您没有这些名称的页面,那么您需要告诉这个方法哪个应该是默认页面。编辑我的原始答案以提供答案。谢谢您的回复。但问题是在startup.cs文件中对进行身份验证。以前,它与home controller和index.cdshtml一起工作。但是现在新模板没有视图文件夹。而不是我们的页面文件夹。你能在fiddler中查看发生了什么吗?您可以检查请求是否无法到达您的web服务器,或者在尝试访问Azure AD url(login.microsoftonline.com)时是否失败。这将帮助你确认确切的问题。嗨,维卡斯!我也面临着同样的问题,将我的应用程序迁移到这个新的项目模板,那里没有更多的cshtml文件…你解决了你的问题吗?是的,我已经解决了这个问题。你面临什么问题?我发布了我的解决方案。你用了同样的方法吗?
        app.Use(async (context, next) =>
        {
            if (!context.User.Identity.IsAuthenticated)
            {
                await context.ChallengeAsync();
            }
            else
            {
                await next();
            }
        });