加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – SignInAsync vs AuthenticateAsync

发布时间:2020-12-15 08:38:02 所属栏目:百科 来源:网络整理
导读:我终于通过JWT令牌认证工作获得了登录方法. 我在这里打电话 await HttpContext.SignInAsync( CookieAuthenticationDefaults.AuthenticationScheme,ClaimsPrincipalFactory.CreatePrincipal(claims),authProps); 我也打过电话 await HttpContext.Authenticate
我终于通过JWT令牌认证工作获得了登录方法.

我在这里打电话

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流程中调用它们的顺序.

ChallengeAsync

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

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

AuthenticateAsync

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

然后将ClaimsPrincipal分配给HttpContext.User.

SignInAsync

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

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

SignOutAsync

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

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

因此,要回答您的问题,如果您已经拥有ClaimsPrincipal,则无需调用AuthenticateAsync.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读