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

时间:2017-03-19 07:14:42

标签: 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();
}

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

更新:顺便说一下,我在这方面的研究成果是Asp.Net Core Action Results Explained的一篇文章。

1 个答案:

答案 0 :(得分:8)

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

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

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

默认情况下...... 拒绝访问 - 即禁止外观重定向到/ Account / AccessDenied 未经身份验证 - 即挑战看起来重定向到/帐户/登录

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

在您的情况下,由于重定向按照默认选项中的指定进行,您将看到302找到的状态代码。

我没有深入研究这方面的代码,但这是我的一般理解。