ForbidAsync Vs ChallengeAsync为什么以及何时使用它们

Ham*_*lla 5 asp.net-core asp.net-core-identity

类上有两种方法AuthenticationManager,ForbidAsync()而且ChallengeAsync(),我知道我可以在我的控制器中执行HttpContext.Authentication.ForbidAsync或返回类型的结果,ForbidResult它具有相同的效果,同样如此ChallengeAsync.但它们似乎产生了相同的结果:

public ForbidResult ForbidResult()
{
  return Forbid();
}

public ChallengeResult ChallengeResult()
{
  return Challenge();
}
Run Code Online (Sandbox Code Playgroud)

ForbidAsync Vs ChallengeAsync 目前没有太多关于它们的使用或任何示例的文档,我想知道如何以及为何使用它们.

更新:顺便说一下,我在这个领域的研究报告中提到了一篇名为Asp.Net Core Action Results Explained的文章.

ste*_*don 9

通常应该在当前访问者未登录但尝试访问需要经过身份验证的用户的操作的情况下使用质询结果.它将提示对凭证的挑战.它还可以用于未经授权的经过身份验证的用户,以及要提示更高权限凭据的用户.

如果当前访问者以系统中的用户身份登录,但尝试访问其帐户无权执行的操作,则应使用禁止的结果.

使用Identity添加的标准ASP.NET Core CookieAuthentication,默认路径设置为处理每种情况并重定向用户.

默认情况下...访问被拒绝 - 即禁止看起来重定向到/ Account/AccessDenied Unauthenticated - 即挑战看起来重定向到/帐户/登录

如果没有重定向,禁止将返回403状态代码,挑战将返回401.

在您的情况下,由于重定向发生在默认选项中指定,您将看到302找到的状态代码.

我没有深入研究这个代码,但这是我的一般理解.