Asp.net-Mvc

“挑戰”一詞代表什麼?

  • July 19, 2017

ControllerBase類有Challenge方法,它返回ChallengeResult類的一個對象。 CookieAuthenticationOptionsAutomaticChallenge有財產。

我相信ChallengeResult與外部登錄有關。但它實際上是如何工作的?“挑戰”一詞從何而來?這裡面有什麼。

AChallengeResultActionResult在執行時挑戰給定身份驗證方案的處理程序的一個。或者,如果沒有指定,則預設質詢方案的處理程序。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 auth 使用的OAuthHandler ( )中看到這一點HandleChallengeAsync(以及 Microsoft 和 Google 身份驗證)。

當您不知道使用者是誰時,您通常會返回一個 Challenge,如果您知道他們是誰,則返回一個 Forbid,但不允許他們執行他們嘗試執行的操作。

引用自:https://stackoverflow.com/questions/45186432