天天看點

asp.net core IdentityServer4 概述

概覽

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

asp.net core IdentityServer4 概述

最常見的互動是:

  • 浏覽器與Web應用程式通信
  • Web應用程式與Web API通信(有時是獨立的,有時是代表使用者的)
  • 基于浏覽器的應用程式與Web API通信
  • 本機應用程式與Web API通信
  • 基于伺服器的應用程式與Web API通信
  • Web API與Web API通信(有時是獨立的,有時是代表使用者的)

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

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

重組應用程式以支援安全令牌服務将導緻以下體系結構和協定:

asp.net core IdentityServer4 概述

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

身份認證

當應用程式需要知道目前使用者的身份時,需要進行身份驗證。通常,這些應用程式代表該使用者管理資料,并且需要確定該使用者隻能通路允許其通路的資料。最常見的示例是(經典)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中間件會向其中添加必要的協定頭,以便用戶端應用程式可以與之對話使用那些标準協定。

asp.net core IdentityServer4 概述

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

相關術語

asp.net core 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/