asp.net-mvc - "Challenge"术语代表什么?

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

ControllerBase类(class)有Challenge方法,返回 ChallengeResult 的对象类(class)。CookieAuthenticationOptions类(class)有AutomaticChallenge属性(property)。

我相信 ChallengeResult与外部登录有关。但它实际上是如何工作的? “挑战”一词从何而来?这里面有什么。

最佳答案

一个 ChallengeResultActionResult执行时,挑战给定的身份验证方案的处理程序。或者,如果未指定,则默认质询方案的处理程序。 Source code for ChallengeResult

例如,您可以执行以下操作:

return Challenge(JwtBearerDefaults.AuthenticationScheme); //Can specify multiple schemes + parameters

这将质询 JWT Bearer 身份验证处理程序。
在此处理程序的情况下,它将响应状态代码设置为 401 以告诉调用者他们需要身份验证才能执行该操作。
AutomaticChallenge (在 ASP.NET Core 1.x 中)是表示这是默认质询处理程序的设置。这意味着如果没有特别命名的身份验证方案将被调用。

在 2.x 中,这已更改,现在您可以指定默认质询方案或更高级别的默认方案。
services.AddAuthentication(o =>
{
    o.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; //Default for everything
    // o.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; //Default specifically for challenges
})

挑战基本上是一种说“我不知道这个用户是谁,请验证他们的身份”的方式。因此,如果触发的身份验证处理程序是例如Facebook 身份验证处理程序,它将通过发出到 Facebook 身份验证页面的重定向来响应挑战。本地帐户身份验证处理程序可能会重定向到本地登录页面。

在 JWT Bearer 身份验证的情况下,处理程序只能使用 401 状态代码进行响应,并将其留给调用者正确地进行身份验证。

您可以在 OAuthHandler 中看到这一点。 ( HandleChallengeAsync ),Facebook 身份验证使用(以及 Microsoft 和 Google 身份验证)。

当您不知道用户是谁时,您通常会返回一个 Challenge,如果您知道他们是谁,则返回一个 Forbid,但不允许他们执行他们试图执行的操作。

关于asp.net-mvc - "Challenge"术语代表什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45186432/

相关文章:

asp.net - ADFS 2.0 身份验证的 Web 服务调用

ASP.NET MVC 网站部分 SSL 身份验证 cookie 未在请求中提交

javascript - MVC 中的动态 CRUD 操作

asp.net-core - ASP.Net Core 排除除英语以外的已发布语言目录

c# - ASP.NET Identity - 多提供商自定义实现

asp.net-mvc - 将 WebAPI 和 MVC 项目发布到同一个 Azure 网站?

linux - 在 Linux 上的 AWS Elastic Beanstalk 中部署多个 ASP.NET Core 应用程序(使用 Kestrel 服务器)

c# - VSTS/TFS 设置环境变量 ASP.NET core

authorization - 如何将管理员的更改传播到用户的声明

c# - ASP Identity 和 Owin - token 生成