1. 程式人生 > >asp.net core IdentityServer4 概述

asp.net core IdentityServer4 概述

概覽

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

最常見的互動是:

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

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

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

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

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

身份認證

當應用程式需要知道當前使用者的身份時,需要進行身份驗證。通常,這些應用程式代表該使用者管理資料,並且需要確保該使用者只能訪問允許其訪問的資料。最常見的示例是(經典)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中介軟體會向其中新增必要的協議頭,以便客戶端應用程式可以與之對話使用那些標準協議。

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

相關術語

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/