SignInAsync vs AuthenticateAsync

Mat*_*ger 11 c# authentication access-token asp.net-core

我终于通过JWT令牌认证工作获得了登录方法.

我在这里打电话

await HttpContext.SignInAsync(
    CookieAuthenticationDefaults.AuthenticationScheme,
    ClaimsPrincipalFactory.CreatePrincipal(claims),
    authProps);
Run Code Online (Sandbox Code Playgroud)

我也打过电话

await HttpContext.AuthenticateAsync(CookieAuthenticationDefaults.AuthenticationScheme);
Run Code Online (Sandbox Code Playgroud)

在示例中,我读到我只需要SignInAsync.所以我测试了它并删除了AuthenticateAsync.但是,User.Identity.IsAuthenticated回归true.

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

Mét*_*ule 26

以下是来自Authentification框架(针对ASP.NET Core 2.0)的所有各种方法之间的概述,按照在典型的auth流程中调用它们的顺序.

ChallengeAsync

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

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

AuthenticateAsync

此步骤处理来自验证页面(您在"挑战"步骤中重定向到的位置)的任何信息,并使用它来创建ClaimsPrincipal标识登录用户的实例.

ClaimsPrincipal然后分配给HttpContext.User.

SignInAsync

此步骤采用ClaimsPrincipal上一步构建,并保持不变.最常见的方式当然是cookies.

请注意,基于https://github.com/aspnet/Security/中的源代码,它似乎是唯一可以持久保存的方法ClaimsPrincipal.

SignOutAsync

这是该步骤的相反SignIn步骤.它指示中间件删除任何持久数据.

  • Cookie将删除存储的Cookie
  • Azure AD会将您重定向到其Microsoft注销页面
  • 等等..

所以要回答你的问题,如果你已经有了,那就没有必要ClaimsPrincipal打电话了AuthenticateAsync.

事实上,在你ClaimsPrincipal打电话之前有点奇怪AuthentificateAsync:)