我终于获得了使用 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/