2017-10-18 88 views
2

我終於得到了我的登錄方法和JWT令牌認證工作。SignInAsync vs AuthenticateAsync

這裏我打電話

await HttpContext.SignInAsync(
    CookieAuthenticationDefaults.AuthenticationScheme, 
    ClaimsPrincipalFactory.CreatePrincipal(claims), 
    authProps); 

我也叫

await HttpContext.AuthenticateAsync(CookieAuthenticationDefaults.AuthenticationScheme); 

在我看,我只需要SignInAsync的例子。 所以我測試了它並刪除了AuthenticateAsync。但仍然,User.Identity.IsAuthenticated返回true

可以刪除AuthenticateAsync嗎?還是我還需要它?它爲什麼存在? 的AuthenticateAsync的文檔字符串只是說用於身份驗證

回答

2

這裏的擴展方法是從身份認證框架來(爲ASP.NET核2.0)所有的各種方法之間的概括,在順序它們被稱爲在典型的認證流程中。

ChallengeAsync

這將指導你上哪兒去要驗證的瀏覽器。例如:

  • 餅乾將您重定向到自己的登錄頁面(如/Account/Login
  • Azure的廣告將您重定向到Microsoft登錄頁面
  • 等。

AuthenticateAsync

這一步處理來自認證頁面的任何信息(您重定向的地方t o通過挑戰步驟),並使用它創建一個識別登錄用戶的實例ClaimsPrincipal

ClaimsPrincipal然後被分配到HttpContext.User

SignInAsync

這一步需要從之前的步驟建立了ClaimsPrincipal,並堅持它。最常見的方式當然是餅乾。

請注意,根據https://github.com/aspnet/Security/中的源代碼,它似乎是堅持ClaimsPrincipal的唯一方法。

SignOutAsync

這是SignIn步驟的反向步驟。它指示中間件刪除任何持久數據。

  • 餅乾將刪除存儲的cookie
  • Azure的廣告將您重定向到他們的Microsoft登出頁面
  • 等。

因此,要回答你的問題,如果你已經有了一個ClaimsPrincipal,呼叫AuthenticateAsync是沒有必要的。

事實上,在致電AuthentificateAsync之前,您有一個ClaimsPrincipal :)

相關問題