ASP.NET Core 2.1中的CookieAuthenticationOptions.LogoutPath属性做什么?

时间:2018-10-08 20:13:56

标签: c# asp.net-core asp.net-core-2.1

在ASP.NET Core 2.1中,谁能解释CookieAuthenticationOptions.LogoutPath的作用?每the documentation说:

  

如果为处理程序提供了LogoutPath,则对该路径的请求将基于ReturnUrlParameter重定向。

但是我什至不认为句子具有适当的语法,所以我对意义感到困惑。

Startup.cs中,我将其设置如下:

// Added after AddMvc()
services.ConfigureApplicationCookie(options =>
{
    options.LogoutPath = $"/account/logout";
});
  1. 何时称呼它?

  2. 我是否需要在GET中创建相应的AccountController动作并为此查看?还是POST动作有效?例如:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Logout()
    {
        await _signInManager.SignOutAsync();
        return RedirectToAction("Index", "Home");
    }
    
  3. 我的注销操作是否需要注销用户,或者届时他们是否已经注销?

1 个答案:

答案 0 :(得分:4)

您可以使用cookie身份验证方案配置的LogoutPath很奇怪。尽管LoginPath具有直接作用,并且基本上是在挑战cookie身份验证时最终用户将重定向到的URL,但是LogoutPath不能直接使用。

相反,当cookie身份验证方案注销时,仅使用配置的LogoutPath来验证当前URL。 check looks like this

// Only redirect on the logout path
var shouldRedirect = Options.LogoutPath.HasValue && OriginalPath == Options.LogoutPath;
await ApplyHeaders(shouldRedirect, context.Properties);

因此,这基本上检查了当前请求路径OriginalPath是否等于配置的注销路径。如果是这种情况,则ApplyHeaders调用将重定向到身份验证属性的RedirectUri

这样做的目的是确保仅在访问实际注销URL时才发生重定向回路径的重定向。因此,例如,如果用户单击注销按钮,则他们可能会注销,然后重定向回到其来源。但是,如果将它们注销到其他位置,则不会自动将它们重定向回,因为只有注销URL被认为是将用户重定向回的安全位置。

LoginPath也存在相同的逻辑。但是还有其他逻辑,即Cookie身份验证方案在受到质疑时(例如,通过授权过滤器要求进行身份验证时)也会将重定向至该URL。

  

我是否需要在AccountController中创建相应的GET操作并为此进行查看?还是可以执行POST操作?

这取决于您以及您要如何处理注销。为了使上述逻辑运行,您只需要在该路由上执行 any 操作即可,因此您还可以执行POST,要求用户执行表单提交以将其注销(以防止意外注销)。通过GET请求)。

  

我的注销操作是否需要注销用户,或者届时他们是否已经注销?

由于这些路由没有隐式处理,因此您必须自己致电SignOutAsync。就像您还需要在LoginPath上实现自己的登录逻辑一样,您也需要实现注销逻辑。

配置的路径实际上只是让cookie方案知道这些路由在哪里,但对它们的行为没有任何影响。