ForbidAsync 与 ChallengeAsync 为什么以及何时使用它们
ForbidAsync Vs ChallengeAsync why and when to use them
在AuthenticationManager
class、ForbidAsync()
和ChallengeAsync()
上有两个方法,我知道我可以执行HttpContext.Authentication.ForbidAsync
或return我的控制器中类型 ForbidResult
的结果,它具有相同的效果,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
没有重定向,禁止将 return 一个 403 状态代码,挑战将 return 一个 401。
在您的情况下,由于重定向是按照默认选项中的指定进行的,因此您看到的是 302 找到的状态代码。
我没有深入研究这方面的代码,但这是我的一般理解。
在AuthenticationManager
class、ForbidAsync()
和ChallengeAsync()
上有两个方法,我知道我可以执行HttpContext.Authentication.ForbidAsync
或return我的控制器中类型 ForbidResult
的结果,它具有相同的效果,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
没有重定向,禁止将 return 一个 403 状态代码,挑战将 return 一个 401。
在您的情况下,由于重定向是按照默认选项中的指定进行的,因此您看到的是 302 找到的状态代码。
我没有深入研究这方面的代码,但这是我的一般理解。