【发布时间】:2022-11-17 17:19:22
【问题描述】:
我多次偶然发现这样的代码(例如在某些控制器操作中):
var result = await HttpContext.AuthenticateAsync();
if (result.Succeeded)
{
// Get authenticated user's principal
var user = result.Principal;
}
如果我们可以通过这种方式访问当前用户,在身份验证中间件根据请求验证 cookie 并登录用户后,直接调用 AuthenticateAsync() 有什么好处?
if (HttpContext.User.Identity.IsAuthenticated)
{
// Get authenticated user's principal
var user = HttpContext.User;
}
【问题讨论】:
-
这意味着编写代码的人最初并不理解他们在做什么。
-
“直接拨打
AuthenticateAsync()有什么好处”- 假设没什么好笑的正在进行(例如 Kerberos/集成身份验证等)则没有任何好处。 -
AuthenticateAsync和AuthorizeAsync是针对不同事物的不同方法。 -
AuthenticateAsync返回的属性比Principal多,因此如果您想查看Properties或Ticket,它会很有用。如果代码仅使用Principal属性,则使用HttpContext.User实际上是一样的。
标签: c# asp.net-core authentication .net-core middleware