c# - SignInAsync 与 AuthenticateAsync

标签 c# authentication asp.net-core access-token

我终于获得了使用 JWT token 身份验证的登录方法。

我调用

await HttpContext.SignInAsync(
    CookieAuthenticationDefaults.AuthenticationScheme,
    ClaimsPrincipalFactory.CreatePrincipal(claims),
    authProps);

我也打过

await HttpContext.AuthenticateAsync(CookieAuthenticationDefaults.AuthenticationScheme);

在示例中,我读到我只需要 SignInAsync。 所以我对其进行了测试并删除了 AuthenticateAsync。但是,User.Identity.IsAuthenticated 仍然返回 true

是否可以删除 AuthenticateAsync?或者我还需要它吗?它为什么存在? AuthenticateAsync 的文档字符串只说明了身份验证的扩展方法

最佳答案

下面是来自身份验证框架(适用于 ASP.NET Core 2.0)的所有各种方法的回顾,按照它们在典型身份验证流程中的调用顺序。

挑战异步

这将指示您的浏览器去哪里进行身份验证。例如:

  • Cookie 会将您重定向到您自己的登录页面(例如 /Account/Login)
  • Azure AD 会将您重定向到 Microsoft 登录页面
  • 等..

AuthenticateAsync

此步骤处理来自身份验证页面(您被质询步骤重定向到的页面)的任何信息,并使用它创建一个 ClaimsPrincipal 实例来标识登录用户。

然后将 ClaimsPrincipal 分配给 HttpContext.User

登录异步

此步骤采用从上一步构建的 ClaimsPrincipal,并将其持久化。最常见的方式当然是cookies。

请注意,基于 https://github.com/aspnet/Security/ 中的源代码,这似乎是保留 ClaimsPrincipal 的唯一方法。

SignOutAsync

这是 SignIn 步骤的逆向步骤。它指示中间件删除任何持久化数据。

  • Cookies 将删除存储的 cookie
  • Azure AD 会将您重定向到他们的 Microsoft 注销页面
  • 等..

所以回答你的问题,如果你已经有一个 ClaimsPrincipal,调用 AuthenticateAsync 是没有必要的。

事实上,在调用 AuthentificateAsync 之前有一个 ClaimsPrincipal 有点奇怪 :)

关于c# - SignInAsync 与 AuthenticateAsync,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46818980/

相关文章:

c# - Float epsilon 在 C++ 中不同于 C#

Java 在 ie 中自动化 Ldap 身份验证

powershell - ASP.NET 5 MVC 6 : Publish-AzureWebsiteProject incorrect directory structure

c# - 如何在一键点击中设置两个事件?

c# - 一个 using block ,在构造函数中有一个对象初始化 block

c# - ListView.RetrieveVirtualItem 事件到底是什么 - C#

Windows 身份验证的 ASP.NET 5 自定义角色

authentication - 我应该将 PKCE 用于 OpenID Connect 与 native 桌面应用程序吗?

c# - 如何使用 System.Linq.Dynamic.Core 将复杂的查询字符串转换为 lambda 表达式

c# - 无法从根提供程序解析作用域服务 Microsoft.AspNetCore.Mvc.ViewFeatures.Internal.IViewBufferScope