.Net Framework 和 .Net Core 中的 AzureAD/OIDC 身份验证差异



我正在尝试在 ASP.Net 核心应用程序中使用 AzureAD 身份验证,并使某些控制器操作不需要用户登录。

使用 Visual Studio 2019,如果我创建一个全新的 ASP.Net 框架应用程序并选择工作/学校帐户进行身份验证 - HomeController 将使用授权属性进行修饰。运行应用程序后,我将被重定向到 Azure 登录屏幕。如果我将"授权"属性从主控制器的顶部移动到"联系人"操作,则在运行应用程序时,在单击"联系人"链接之前,不会重定向到登录。这正是我所期望的。

如果我创建一个全新的 ASP.Net Core 应用程序(再次选择工作/学校帐户进行身份验证(- 并将"授权"属性从主控制器的顶部移动到"隐私"操作 - 我在运行应用程序后立即重定向到登录,而不是等待我导航到"隐私"操作。

代码示例

[Authorize]
public class HomeController : Controller
...
public IActionResult Privacy()
...

行为与此相同

public class HomeController : Controller
...
[Authorize]
public IActionResult Privacy()
...

在 ASP.Net 核心。

1( 这两者之间的身份验证有什么不同? 2( 有没有一种简单的方法可以使 ASP.Net Core 应用程序仅在点击授权属性时进行身份验证?

这是因为 asp.net 核心模板会创建一个全局AuthorizeFilter,以确保所有操作都需要经过身份验证的用户才能访问:

.NET Core 2.x :

services.AddMvc(options =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new AuthorizeFilter(policy));
})

.Net Core 3.x:

services.AddControllersWithViews(options =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new AuthorizeFilter(policy));
});

您可以删除过滤器:

.NET Core 2.x :

services.AddMvc()

.NET Core 3.x :

services.AddControllersWithViews();

最新更新