asp.net core IdentityServer4 概述


概覽

現代應用程序看上去大都是這樣的:

現代應用程序網絡架構

最常見的交互是:

  • 瀏覽器與Web應用程序通信
  • Web應用程序與Web API通信(有時是獨立的,有時是代表用戶的)
  • 基於瀏覽器的應用程序與Web API通信
  • 本機應用程序與Web API通信
  • 基於服務器的應用程序與Web API通信
  • Web API與Web API通信(有時是獨立的,有時是代表用戶的)

通常,每一層(前端,中間層和后端)都必須保護資源並實施身份驗證和/或授權-經常針對同一用戶存儲。

將這些基本安全功能外包給安全令牌服務可防止在那些應用程序和端點之間重復該功能。

重組應用程序以支持安全令牌服務將導致以下體系結構和協議:

protocols

這樣的設計將安全問題分為兩個部分:

身份認證

當應用程序需要知道當前用戶的身份時,需要進行身份驗證。通常,這些應用程序代表該用戶管理數據,並且需要確保該用戶只能訪問允許其訪問的數據。最常見的示例是(經典)Web應用程序,但是本機和基於JS的應用程序也需要身份驗證。

最常見的身份驗證協議是SAML2p,WS-Federation和OpenID Connect-SAML2p是最受歡迎和部署最廣泛的協議。

OpenID Connect是三者中的最新者,但被認為是未來,因為它在現代應用程序中具有最大的潛力。它從一開始就針對移動應用程序場景而構建,並旨在實現API友好。

API訪問

應用程序有兩種與API通信的基本方式-使用應用程序身份或委派用戶身份。有時兩種方法需要結合。

OAuth2是一種協議,允許應用程序從安全令牌服務請求訪問令牌並使用它們與API通信。由於可以集中身份驗證和授權,因此這種委派降低了客戶端應用程序和API的復雜性。

OpenID Connect和OAuth 2.0 –更好的結合在一起

OpenID Connect和OAuth 2.0非常相似-實際上,OpenID Connect是OAuth 2.0的擴展。身份驗證和API訪問這兩個基本的安全問題被組合成一個協議-通常只需一次往返於安全令牌服務。

我們相信OpenID Connect和OAuth 2.0的結合是在可預見的將來保護現代應用程序的最佳方法。IdentityServer4是這兩個協議的實現,並且經過高度優化,可以解決當今移動,本機和Web應用程序中的典型安全問題。

IdentityServer4如何提供幫助

IdentityServer是將符合規范的OpenID Connect和OAuth 2.0端點添加到任意ASP.NET Core應用程序的中間件。

通常,您構建(或重復使用)包含登錄和注銷頁面(可能還需要您同意-取決於您的需要)的應用程序,IdentityServer中間件會向其中添加必要的協議頭,以便客戶端應用程序可以與之對話使用那些標准協議。

IdentityServer中間件

你可以根據你的需要使用盡可能復雜的宿主應用程序。但是,為了保持受攻擊面盡可能小, 我們一般建議你只將認證相關的UI包含進來。

相關術語

IdentityServer4相關術語

IdentityServer

IdentityServer 是一個 OpenID Connect 提供程序 —— 它實現了OpenID Connect 和 OAuth2 協議。

對於相同的角色,不同的文獻將使用不同的術語 —— 你可能也發現了安全令牌服務(Security Token Service),身份提供程序(Identity Provider),授權服務器(Authorization Server),IP-STS 等等。但是他們都具相同的含義:軟件中用來向客戶端發行安全令牌的部分。

IdentityServer 包含一些職責和功能:

  • 保護你的資源
  • 使用本地賬戶存儲或外部的身份提供程序來進行用戶身份認證
  • 提供會話管理和單點登錄(Single Sign-on)
  • 客戶端管理和認證
  • 給客戶端發行身份令牌和訪問令牌
  • 驗證令牌

用戶

用戶是通過已注冊客戶端訪問相關數據的人。

客戶端

客戶端是軟件中從 IdentityServer 請求令牌(Token)的部分 —— 既可以是為了認證一個用戶(即請求的是 身份令牌),也可以是為了訪問一個資源(即請求的是 訪問令牌)。一個客戶端必須首先注冊到 IdentityServer 才能請求相關的令牌。

客戶端可以是Web應用程序、移動客戶端或桌面應用程序、單頁面應用程序(SPA,Single Page Application)、服務器進程等等。

資源

資源就是你想要通過 IdentityServer 保護的東西 —— 既可以是你的用戶的 身份信息,也可以是 API。

每個資源都有唯一的名稱 —— 客戶端使用這些名稱來指定他們想要訪問的資源。

身份數據(Identity data) 是一個用戶的身份信息(又稱為 claims),比如 名字(name) 和 郵箱地址(email address)。

API 資源表示的是客戶端想要調用的功能 —— 通常通過 Web API 來對 API 資源建模,但這不是必須的。

身份令牌

一個身份令牌表示的是認證過程的輸出。它最低限度地標識了某個用戶(這也可以稱為主身份信息的子集,原文:Called the sub aka subject claim),還包含了用戶的認證時間和認證方式。身份令牌可以包含額外的身份數據。

訪問令牌

訪問令牌用來授予訪問某個 API 資源的權限。客戶端請求訪問令牌,然后被導向 API。訪問令牌包含了客戶端和用戶(如果提供了的話)的相關信息,API通過這些信息來給它們授予數據訪問權限。

參考:http://docs.identityserver.io/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM