什么"挑战"术语代表什么?

时间:2017-07-19 09:29:20

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

ControllerBase类有Challenge方法,它返回ChallengeResult类的对象。 CookieAuthenticationOptions类具有AutomaticChallenge属性。

我相信ChallengeResult与外部登录有关。但它是如何实际工作的?术语"挑战"来自?这里面有什么。

1 个答案:

答案 0 :(得分:16)

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状态代码进行响应之外,处理程序不能执行任何操作,并将其留给调用者以正确地进行身份验证。

您可以在Facebook授权使用的OAuthHandlerHandleChallengeAsync)中查看此操作(以及Microsoft和Google身份验证)。

您通常在不知道用户是谁时返回挑战,如果您知道他们是谁,则通常会返回,但不允许他们执行他们尝试的操作。