1、整體介紹前端
大多數現代應用或多或少是這樣的:git
一般,每一個層(前端、中間層和後端)都必須保護資源並實現身份驗證和/或受權——一般針對相同的用戶存儲。github
將這些基本的安全功能外包給安全令牌服務,能夠防止在這些應用程序和端點之間重複這些功能。 web
重組應用程序以支持安全令牌服務將致使如下架構和協議:後端
這種設計將安全問題分爲兩部分:api
身份認證安全
當應用程序須要知道當前用戶的身份時,須要進行身份驗證。一般,這些應用程序表明該用戶管理數據,並須要確保該用戶只能訪問容許他訪問的數據。最多見的例子是(經典)Web應用程序 - 但原生和基於JS的應用程序也須要身份驗證。服務器
最多見的身份驗證協議是SAML2p、WS-Federation和OpenID Connect——SAML2p是最受歡迎的和最普遍部署的。架構
OpenID Connect是這三種類型中最新的一種,但被認爲是將來的,由於它最有可能應用於現代應用。它從一開始就爲移動應用程序場景構建,設計爲API友好。 ide
API訪問
應用程序有兩種與API進行通訊的基本方式 - 使用應用程序標識或發放用戶身份。 有時兩種方法須要結合。
OAuth2是一種協議,容許應用程序從安全令牌服務請求訪問令牌,並使用它們與api通訊。這種受權下降了客戶端應用程序和API的複雜性,由於能夠集中驗證和受權。
OpenID鏈接和OAuth 2.0 -更好地結合在一塊兒
OpenID鏈接和OAuth 2.0很是類似——事實上,OpenID鏈接是OAuth 2.0之上的擴展。身份認證和API訪問這兩個基本的安全問題被合併爲一個協議 - 每每只需一次往返安全令牌服務。
咱們認爲,OpenID Connect和OAuth 2.0的結合是在可預見的將來保護現代應用程序的最佳方法。IdentityServer4是這兩個協議的一個實現,它高度優化以解決當今移動、本地和web應用程序的典型安全問題。
IdentityServer4如何提供幫助
IdentityServer是一種中間件,可將符合規範的OpenID Connect和OAuth 2.0端點添加到任意的ASP.NET Core應用程序中。
一般狀況下,您構建(或從新使用)包含登陸和註銷頁面的應用程序(也可能取決於您的須要),IdentityServer中間件會添加必要的協議頭,以便客戶端應用程序可使用這些標準協議與它進行對話。
託管應用程序能夠像您想的那樣複雜,但咱們一般建議經過僅包含與身份驗證相關的用戶界面來儘量縮小攻擊面。
2、術語
IdentityServer
IdentityServer是一個OpenID鏈接提供程序——它實現了OpenID鏈接和OAuth 2.0協議。
不一樣的文獻對相同的角色使用不一樣的術語——您可能還會發現安全令牌服務、身份提供程序、受權服務器、IP-STS等等。
但他們簡而言之就是:一種向客戶發放安全令牌的軟件。
IdentityServer有許多任務和特性——包括:
User
用戶是使用註冊客戶端訪問資源的人。
Client
客戶端是一種軟件,它從IdentityServer請求令牌——用於驗證用戶(請求身份令牌)或訪問資源(請求訪問令牌)。客戶端必須首先在IdentityServer上註冊,而後才能請求令牌。
客戶端的示例包括web應用程序、本地移動或桌面應用程序、SPAs、服務器進程等。
Resources
資源是您但願使用IdentityServer(用戶的標識數據或api)保護的內容。
每一個資源都有一個惟一的名稱——客戶端使用這個名稱來指定他們想要訪問的資源。
關於用戶的身份數據標識信息(又名claims),例如姓名或電子郵件地址。
api資源表示客戶機但願調用的功能——一般建模爲Web api,但不必定。
Identity Token
標識符表示身份驗證過程的結果。它至少包含用戶的標識符(稱爲sub - 又名 subject claim)和用戶如何以及什麼時候認證的信息。它能夠包含其餘標識數據。
Access Token
訪問令牌容許訪問API資源。客戶端請求訪問令牌並將它們轉發到API。訪問令牌包含關於客戶端和用戶的信息(若是存在)。api使用這些信息受權訪問它們的數據。
3、包和建立
IdentityServer 由許多nuget包組成。
IdentityServer4
包含核心IdentityServer對象模型,服務和中間件。 只包含對內存配置和用戶存儲的支持 - 可是您能夠經過配置爲其餘存儲提供插件支持。 這就是其餘repos和包的內容。
Quickstart UI
包含一個簡單的starter UI,包括登陸、註銷和贊成頁面。
Access token validation handler
ASP.NET核心身份驗證處理程序,用於在api中驗證令牌。處理程序容許在相同的API中同時支持JWT和引用令牌。
ASP.NET Core Identity
用於IdentityServer的ASP.NET Core Identity集成包。 該軟件包提供了一個簡單的配置API來爲您的IdentityServer用戶使用ASP.NET身份管理庫。
EntityFramework Core
EntityFramework用於IdentityServer的核心存儲實現。這個包爲IdentityServer中的配置和操做存儲提供了EntityFramework實現。
4、演示服務和測試
https://demo.identityserver.io/
您可使用您最喜歡的客戶端庫嘗試IdentityServer4。咱們在demo.identityserver.io中有一個測試實例。在主頁上,您能夠找到關於如何配置您的客戶端以及如何調用API的說明。
https://github.com/IdentityServer/CrossVersionIntegrationTests/tree/master/src
此外,咱們還有一個能夠執行各類IdentityServer和Web API組合(IdentityServer 3和4,ASP.NET Core和Katana)的repo。 咱們使用這個測試工具來確保全部的排列工做。 你能夠經過克隆這個回購測試你本身。