使用 OIDC 的 ASP.NET Core 应用程序中始终重定向到身份验证的默认 URL“/”

问题描述 投票:0回答:1

我有一个应用程序设置,可以使用 Microsoft.Identity.Web 包通过 Azure AD 进行 OIDC 身份验证。

配置为:

  services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApp(options => {
       configuration.Bind("AzureAd", options);
   });

app.UseAuthentication();
app.UseAuthorization();

app.MapControllerRoute(
  name: "default",
  pattern: "{controller=Home}/{action=Index}/{id?}");

但是,当应用程序加载并且浏览器导航到 https://localhost:1524/ 时,我会自动重定向到 Azure AD 登录,尽管 HomeController 具有 AllowAnnonymous。

如果我明确访问 HomeController,即 https://localhost:1542/home/index,则页面无需身份验证即可加载。

为什么默认 URL 会导致身份验证启动?

我期望加载默认路由而不重定向到 Azure AD

c# azure asp.net-core azure-active-directory azure-entra-id
1个回答
0
投票

为什么默认 URL 会导致身份验证启动?我是 期望加载默认路由而不重定向到 Azure AD

如果您也可以共享您的控制器,那就太好了。根据您在 program.cs 代码中调用

app.UseAuthentication()
app.UseAuthorization()
的场景,应用程序在到达控制器之前会经过身份验证和授权管道。

如果您的

HomeController.Index
操作未明确指定任何授权要求(如
[AllowAnonymous]
),则会启动默认行为,即根据配置的身份验证方案(在本例中为 Azure AD)检查经过身份验证的用户。

为了解决您的问题,您可以按照以下任一方式操作:

如果您的控制器没有

[AllowAnonymous]
注释,您可以使用它。

另一种方法可以是在身份验证配置中对默认路由使用特定路由排除。您可以通过修改

AddMicrosoftIdentityWebApp
选项来指定要从身份验证中排除的路由模式来实现此目的。所以你可以这样做:

builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApp(options =>
    {
        configuration.Bind("AzureAd", options);
        options.ExcludedPaths.Add("/");
    });

注意: 请记住,通过添加

options.ExcludedPaths.Add("/");
,您将告诉身份验证中间件跳过对根路径(“/”)的请求的身份验证

此外,使用您已删除的授权策略也可以帮助解决该问题。在这种情况下,您可以修改您的政策,如下所示:

builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("AllowAnonymous", policy => policy.Requirements.Add(new AllowAnonymousRequirement()));
});

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}",
    defaults: new { policy = "AllowAnonymous" });

注意: 通过上述修改,索引操作将指示授权中间件跳过检查此特定操作的身份验证,从而允许匿名访问。如果您想了解更多,请参考这个官方文档

© www.soinside.com 2019 - 2024. All rights reserved.