“挑戰”一詞代表什麼?
ControllerBase類有Challenge方法,它返回ChallengeResult類的一個對象。CookieAuthenticationOptions類AutomaticChallenge有財產。我相信
ChallengeResult與外部登錄有關。但它實際上是如何工作的?“挑戰”一詞從何而來?這裡面有什麼。
A
ChallengeResult是ActionResult在執行時挑戰給定身份驗證方案的處理程序的一個。或者,如果沒有指定,則預設質詢方案的處理程序。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,但不允許他們執行他們嘗試執行的操作。