【问题标题】:AzureAD/OIDC authentication differences in .Net Framework and .Net Core.Net Framework 和 .Net Core 中的 AzureAD/OIDC 身份验证差异
【发布时间】:2020-05-15 14:44:41
【问题描述】:

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

使用 Visual Studio 2019,如果我创建一个全新的 ASP.Net Framework 应用程序并选择工作/学校帐户进行身份验证 - HomeController 将使用 Authorize 属性进行装饰。一旦我运行应用程序,我就会被重定向到 Azure 登录屏幕。如果我将 Authorize 属性从 Home 控制器的顶部移动到 Contact 操作,当我运行应用程序时,我不会重定向到登录,直到我单击 Contact 链接。这正是我所期望的。

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

代码示例

这个

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

行为与此相同

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

在 ASP.Net Core 中。

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

【问题讨论】:

    标签: asp.net-core openid-connect


    【解决方案1】:

    这是因为 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();
    

    【讨论】:

      猜你喜欢
      • 2022-10-24
      • 2020-10-15
      • 2020-05-18
      • 2014-05-27
      • 1970-01-01
      • 2018-02-08
      • 2014-07-15
      • 2020-04-28
      • 2021-06-15
      相关资源
      最近更新 更多