7

我正在開發ASP NET Core Web API,並且我很困惑,通過選擇身份驗證方法。我曾經使用默認的Asp Net身份驗證,但最近我對JWT瞭如指掌。所以我實現了身份驗證,就像它在本文中所做的那樣:https://stormpath.com/blog/token-authentication-asp-net-core。 但我不明白這個JWT的好處。使用簡單的Asp Net身份驗證,我不關心令牌存儲等。我只需要登錄signInManager並使用授權的方法,直到註銷。有了JWT,我需要考慮令牌存儲,到期和其他困難。那麼,這個JWT的好處是什麼?如何在登錄後存儲此JWT令牌?此外,我是否應該使用這個JWT?在我的情況下,我需要對簡單的WebApi進行簡單身份驗證,它將被一個或多個用戶使用。我也聽說過OpenIddict,Auth0,IdentityServer,所以這些認證機制有什麼區別?ASP .NET Core Identity默認身份驗證與JWT身份驗證

回答

5

這是我理解這個的方式,分爲3個邏輯部分。

  1. 認證服務器 - 這將驗證併發布JWT toke,當API需要驗證令牌時,它會將令牌發送到此服務器以驗證它。
  2. 客戶端 - 這是爲您的網頁或您的應用程序提供服務。這是需要請求並存儲JWT令牌的內容。每次請求數據時,客戶端都需要將令牌傳遞給API。
  3. API--這是提供信息和需要使用認證服務器驗證令牌的原因。

那麼,這個JWT有什麼好處呢?

JWT發給客戶端並存儲在客戶端。使用JWT可以讓多個客戶端(應用程序或網站)使用相同的認證服務器來分發JWT,並說明客戶端可以使用哪些API以及如何使用。

如何在登錄後存儲此JWT令牌?

我只是試圖將它存儲在Ionic 2應用程序中,該應用程序使用角度爲2的存儲模塊。但我敢肯定,很多人已經做到了這一點,並問這個問題:

Simple JWT authentication in ASP.NET Core 1.0 Web API

Token Based Authentication in ASP.NET Core (refreshed)

此外,應我甚至使用此JWT?在我的情況下,我需要簡單的 身份驗證簡單的WebApi,將由一個或多個 更多的用戶使用。

整體分離問題的原因是性能,因此您並不需要它,因爲它只是一個或多個用戶。 這樣做是因爲它是一種學習體驗,JWT從一開始就不容易安裝,並且需要你做大量的閱讀,你會失敗,你會感到沮喪,但最終你會知道如何設置和它如何工作

我也聽說過OpenIddict,Auth0,IdentityServer,所以所有這些身份驗證機制有什麼區別?

那麼你在Stormpath教程中做了什麼不是生產就緒。這只是一個小小的演示,可以幫助您瞭解JWT的功能和工作原理。上面提到的是完整的庫,可以解決所有繁重的工作,並且不需要從頭開始構建整個工作。它們之間的主要區別在於它們覆蓋的範圍。

我親自使用IS4和它我哭不超過2倍(這是簡單的比我想象的): http://identityserver4.readthedocs.io/en/release/

https://github.com/openiddict/openiddict-core

https://auth0.com/docs/quickstart/webapp/aspnet-core/00-intro

+0

感謝您的回答。因此,如果我決定對一個Web Api使用身份驗證,而這個Web Api會對另一個Web Api進行身份驗證請求,那麼最好的解決方案就像Single Sign On一樣。 (IdentityServer4,Auth0)? –

+0

@AndrewK客戶端將令牌傳遞給api,並且api使用認證服務器驗證令牌,如果您有多個API,您只需將它們指向同一個認證服務器,多種API /客戶端可以使用單點登錄,因爲發佈的令牌來自單個認證服務器。請記住,認證服務器不是一個API。我使用了Identity Server 4,它允許您創建可以頒發和驗證令牌的認證服務器。注意:如果你有1個API調用另一個,你做錯了什麼。 –

+0

@Anton我認爲是asp。網絡身份不會使用會話,只是將用戶聲明加密並放入cookie中,所以我們無法獲得任何性能,但通過使用令牌,API服務器必須調用auth服務器來驗證令牌作爲表現,我認爲餅乾更好。 – Lerner

3

如果您的Web Api被AJAX調用訪問,那麼JWT可能是一個理想的選擇,但不是強制性的。根據你的應用程序的描述來判斷,在我看來,默認的身份驗證系統可以很好地爲你服務。 Auth2是啓用外部登錄(例如Facebook)的身份驗證機制。它是默認身份驗證系統的一部分,爲了在您的應用中使用它,您無需多花費任何工作。

OpenIddict位於Auth2之上。它是默認身份驗證系統的一部分,爲了在您的應用中使用它,您無需多花費任何工作。這是允許外部登錄的身份驗證機制,例如Google+

IdentityServer可用於通過Ajax調用訪問的大型Wep Api。例如,您可以使用IdentityServer來認證渴望前端Angular應用程序的用戶。

再次,默認的認證系統可以很好地爲您服務。

希望這有助於...

4

使用令牌(JWT),如果你有多個應用程序或服務(Web,移動,其他服務)連接到你的API。優點:無狀態,可擴展性,無cookie,無CORS問題(如果允許的話)。

如果您的API僅供一個Web應用程序使用,則使用默認的ASP默認身份驗證系統。它更容易設置。

3

如果你的WebAPI和用戶界面託管在同一個Web應用程序中,令牌庫安全性不會爲您通過基於內置身份驗證提供的基於cookie的身份驗證購買任何東西。這是因爲身份驗證cookie會在每個HTTP請求中發送回keep應用程序。當您撥打除您登錄的Cookie之外的其他網站的電話不會被髮送。因此,Jason Web Tokens(JWT)爲瀏覽器提供了一種標準格式,用於在Cookie不是選項時將身份信息發送到網站。