AuthenticationManager
类上有两种方法,ForbidAsync()
和ChallengeAsync()
,我知道我可以在控制器中执行HttpContext.Authentication.ForbidAsync
或返回一个ForbidResult
类型的结果,它具有相同的效果,ChallengeAsync
也是如此。但它们似乎产生了同样的结果:
public ForbidResult ForbidResult()
{
return Forbid();
}
public ChallengeResult ChallengeResult()
{
return Challenge();
}
关于它们的使用或任何例子,这里没有太多的文档,我想知道如何和为什么使用它们。
Update:顺便说一句,我把这方面的研究写成了一篇名为解释Asp.Net核心行动结果的文章。
发布于 2017-03-19 16:36:52
在当前访问者未登录但试图访问需要经过身份验证的用户的操作时,通常应使用挑战结果。这将引发对全权证书的质疑。它还可以用于身份验证用户(未授权操作),以及您希望提示提供更高权限凭据的用户。
如果当前访问者在系统中以用户身份登录,但试图访问其帐户没有权限执行的操作,则应使用禁止结果。
使用标准的ASP.NET核心CookieAuthentication按标识添加,默认路径被设置为处理每一种情况,并且用户被重定向。
默认情况下..。拒绝访问--即禁止重定向/帐户/未经身份验证的访问--即挑战看起来重定向到/Account/Login
没有重定向,禁用将返回403状态代码,挑战将返回401。
在您的示例中,由于重定向发生在默认选项中,因此您将看到302找到的状态代码。
我还没有深入研究过这方面的代码,但这是我的一般理解。
https://stackoverflow.com/questions/42883946
复制相似问题