我正在開發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身份驗證
回答
這是我理解這個的方式,分爲3個邏輯部分。
- 認證服務器 - 這將驗證併發布JWT toke,當API需要驗證令牌時,它會將令牌發送到此服務器以驗證它。
- 客戶端 - 這是爲您的網頁或您的應用程序提供服務。這是需要請求並存儲JWT令牌的內容。每次請求數據時,客戶端都需要將令牌傳遞給API。
- 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
如果您的Web Api被AJAX調用訪問,那麼JWT可能是一個理想的選擇,但不是強制性的。根據你的應用程序的描述來判斷,在我看來,默認的身份驗證系統可以很好地爲你服務。 Auth2是啓用外部登錄(例如Facebook)的身份驗證機制。它是默認身份驗證系統的一部分,爲了在您的應用中使用它,您無需多花費任何工作。
OpenIddict位於Auth2之上。它是默認身份驗證系統的一部分,爲了在您的應用中使用它,您無需多花費任何工作。這是允許外部登錄的身份驗證機制,例如Google+
IdentityServer可用於通過Ajax調用訪問的大型Wep Api。例如,您可以使用IdentityServer來認證渴望前端Angular應用程序的用戶。
再次,默認的認證系統可以很好地爲您服務。
希望這有助於...
使用令牌(JWT),如果你有多個應用程序或服務(Web,移動,其他服務)連接到你的API。優點:無狀態,可擴展性,無cookie,無CORS問題(如果允許的話)。
如果您的API僅供一個Web應用程序使用,則使用默認的ASP默認身份驗證系統。它更容易設置。
如果你的WebAPI和用戶界面託管在同一個Web應用程序中,令牌庫安全性不會爲您通過基於內置身份驗證提供的基於cookie的身份驗證購買任何東西。這是因爲身份驗證cookie會在每個HTTP請求中發送回keep應用程序。當您撥打除您登錄的Cookie之外的其他網站的電話不會被髮送。因此,Jason Web Tokens(JWT)爲瀏覽器提供了一種標準格式,用於在Cookie不是選項時將身份信息發送到網站。
- 1. Asp .NET身份Cookie身份驗證
- 2. 在ASP .NET Web Api中打開身份驗證身份驗證
- 3. 實施JWT身份驗證
- 4. go-restful + JWT身份驗證
- 5. JWT身份驗證和用戶驗證
- 6. JWT身份驗證到期
- 7. Laravel默認身份驗證與模式
- 8. 身份驗證:JWT使用與會話
- 9. 護照JWT&授權與身份驗證
- 10. ASP窗體身份驗證
- 11. 身份驗證winform + asp
- 12. ASP/PHP身份驗證
- 13. Identity Server 4.Net Core 2.0:多種身份驗證類型
- 14. .Net Forms身份驗證身份驗證不會出現
- 15. Webfarm身份驗證
- 16. 身份驗證授權ASP/NET MVC 3使用成員身份
- 17. Sharepoint身份驗證.Net
- 18. .net中的身份驗證
- 19. 身份驗證mysql到.net
- 20. .NET身份驗證和AJAX
- 21. .NET WebApi身份驗證
- 22. .NET Forms ReportViewer身份驗證
- 23. .NET身份驗證問題
- 24. Identity Server 3雙因素身份驗證
- 25. 從webview默認身份驗證
- 26. JWT驗證在ASP.Net核心與ASP身份
- 27. Windows身份驗證與system.windows.forms.webbrowser
- 28. Windows身份驗證與表單身份驗證
- 29. HTTP簡單身份驗證與POST表單身份驗證
- 30. Rails Api身份驗證與用戶身份驗證
感謝您的回答。因此,如果我決定對一個Web Api使用身份驗證,而這個Web Api會對另一個Web Api進行身份驗證請求,那麼最好的解決方案就像Single Sign On一樣。 (IdentityServer4,Auth0)? –
@AndrewK客戶端將令牌傳遞給api,並且api使用認證服務器驗證令牌,如果您有多個API,您只需將它們指向同一個認證服務器,多種API /客戶端可以使用單點登錄,因爲發佈的令牌來自單個認證服務器。請記住,認證服務器不是一個API。我使用了Identity Server 4,它允許您創建可以頒發和驗證令牌的認證服務器。注意:如果你有1個API調用另一個,你做錯了什麼。 –
@Anton我認爲是asp。網絡身份不會使用會話,只是將用戶聲明加密並放入cookie中,所以我們無法獲得任何性能,但通過使用令牌,API服務器必須調用auth服務器來驗證令牌作爲表現,我認爲餅乾更好。 – Lerner