asp.net-core - ForbidAsync 与 ChallengeAsync 为什么以及何时使用它们

标签 asp.net-core asp.net-core-identity

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

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

public ChallengeResult ChallengeResult()
{
  return Challenge();
}

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

更新:顺便说一句,我将我在这方面的研究整理成一篇文章,名为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/

相关文章:

c# - 在 Xunit 单元测试中使用 AuthorizeAsync() 测试用户是否具有特定权限

c# - UserManager.CheckPasswordAsync 与 SignInManager.PasswordSignInAsync

azure - 如果我们已经在.Net Core微服务API网关中实现了授权,是否还需要在所有微服务中实现?

c# - .NET Core 将本地 API 表单数据发布请求转发到远程 API

c# - 为什么我需要创建一个返回 DateTime.Now 而不是直接使用 DateTime.Now 的 DateTime 服务?

ASP.NET 5 vNext。仅发布 "dist"子文件夹

c# - Entity Framework Core 上没有 CreateStoredProcedure 方法

authentication - 我们可以在 Asp.NET Core 中销毁/无效 JWT token 吗?

c# - .NET Core 3.1 基于角色的 JWT 授权返回 403 禁止

c# - Blazor 和 Web API 解决方案中的 .NET Core 身份