我终于有了JWT token 认证的登录方法。

我在这里打电话

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

我也打过电话
await HttpContext.AuthenticateAsync(CookieAuthenticationDefaults.AuthenticationScheme);

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

可以删除AuthenticateAsync吗?还是我仍然需要它?为什么存在?AuthenticateAsync的文档字符串仅表示用于身份验证的扩展方法

最佳答案

下面是对来自Authentification框架(针对ASP.NET Core 2.0)的所有各种方法的概述,按照在典型auth流中调用它们的顺序。
挑战异步
这将指导您的浏览器进行身份验证。例如:

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

  • AuthenticateAsync
    此步骤处理来自身份验证页面(“挑战”步骤将您重定向到该页面)的任何信息,并使用该信息来创建一个识别登录用户的ClaimsPrincipal实例。
    然后将该ClaimsPrincipal分配给HttpContext.User
    SignInAsync
    此步骤采用从上一步构建的ClaimsPrincipal并将其持久化。最常见的方式当然是cookie。
    请注意,根据https://github.com/aspnet/Security/中的源代码,这似乎是保留ClaimsPrincipal的唯一方法。
    SignOut异步
    这是SignIn步骤的相反步骤。它指示中间件删除所有持久数据。
  • Cookies将删除存储的cookie
  • Azure AD会将您重定向到其Microsoft注销页面
  • 等。

  • 因此,如果您已经有了ClaimsPrincipal,则不必回答AuthenticateAsync来回答您的问题。
    实际上,在调用ClaimsPrincipal之前拥有AuthentificateAsync有点奇怪:

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

    10-09 04:14