AuthenticationManager
有两种方法类,ForbidAsync()
和ChallengeAsync()
,我知道我可以执行 HttpContext.Authentication.ForbidAsync
或返回 ForbidResult
类型的结果在我的 Controller 中,它具有相同的效果,ChallengeAsync
也是如此。 。但它们似乎产生了相同的结果:
public ForbidResult ForbidResult()
{
return Forbid();
}
public ChallengeResult ChallengeResult()
{
return Challenge();
}
目前还没有太多关于它们使用的文档或任何示例,我想知道如何以及为什么使用它们。
更新:顺便说一句,我将我在这方面的研究整理成一篇文章,名为Asp.Net Core Action Results Explained .
最佳答案
质询结果通常应在当前访问者未登录但尝试访问需要经过身份验证的用户的操作的情况下使用。它将引发对凭据的质疑。它还可以用于经过身份验证的用户,该用户无权执行该操作,并且您希望提示输入更高权限的凭据。
如果当前访问者以系统用户身份登录,但试图访问其帐户无权执行的操作,则应使用禁止结果。
通过 Identity 添加标准 ASP.NET Core CookieAuthentication,设置默认路径来处理每种情况,并且用户会被重定向。
默认情况下... 访问被拒绝 - 即禁止看起来重定向到/Account/AccessDenied 未经身份验证 - 即挑战看起来重定向到/Account/Login
如果没有重定向,禁止将返回 403 状态码,挑战将返回 401。
在您的情况下,由于按照默认选项中指定的方式进行重定向,因此您会看到 302 已找到状态代码。
我没有深入研究过这方面的代码,但这是我的一般理解。
关于asp.net-core - ForbidAsync 与 ChallengeAsync 为什么以及何时使用它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42883946/