我终于有了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流中调用它们的顺序。
挑战异步
这将指导您的浏览器进行身份验证。例如:
/Account/Login
)AuthenticateAsync
此步骤处理来自身份验证页面(“挑战”步骤将您重定向到该页面)的任何信息,并使用该信息来创建一个识别登录用户的
ClaimsPrincipal
实例。然后将该
ClaimsPrincipal
分配给HttpContext.User
。SignInAsync
此步骤采用从上一步构建的
ClaimsPrincipal
并将其持久化。最常见的方式当然是cookie。请注意,根据https://github.com/aspnet/Security/中的源代码,这似乎是保留
ClaimsPrincipal
的唯一方法。SignOut异步
这是
SignIn
步骤的相反步骤。它指示中间件删除所有持久数据。因此,如果您已经有了
ClaimsPrincipal
,则不必回答AuthenticateAsync
来回答您的问题。实际上,在调用
ClaimsPrincipal
之前拥有AuthentificateAsync
有点奇怪:关于c# - SignInAsync与AuthenticateAsync,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46818980/