以下思路參考于 IdentityServer4 源碼贱枣,流程。閱讀文章請 先 熟悉 OAuth 2.0, Open ID ,Open ID Connect 徒探。本文章已申請授權(quán)騎士處理腊凶,轉(zhuǎn)載請注明出處票髓。
存儲于 本機(jī) Markdown文檔锅纺。 | 待更新掷空。
IdentityServer4是一個針對 ASP.NET Core 2.0 的OpenID Connect 和 OAuth 2.0框架肋殴。
在你的應(yīng)用中囤锉,它支持以下特性:
Authentication as a Service
所有應(yīng)用程序的集中登錄邏輯和工作流(web,native,mobile,services),IdentityServer 是一個官方認(rèn)證的OpenID Connect的實現(xiàn)。
Single Sign-on / Sign-out
在多個應(yīng)用程序類型的登入和登出
Access Control for APIs
為不同的客戶端提供api的訪問令牌护锤,e.g. server to server, web 應(yīng)用官地,SPAs和 native .mobile apps
Federation Gateway(聯(lián)合網(wǎng)關(guān))
支持如Azure AD,Google,Facebook等外部的身份驗證提供者,這將保護(hù)你的應(yīng)用程序從如何連接到這些外部提供程序的細(xì)節(jié)烙懦。
Focus on Customization(專注于定制)
最重要的一部分--IdentityServer 的很多方面都可以定制驱入,以滿足你的需求,由于IdentityServer 是一個框架氯析,而不是一個boxed product或者一個SaaS,所以你可以編寫代碼來對系統(tǒng)進(jìn)行調(diào)整亏较,以適應(yīng)您的場景。
Mature Open Source(成熟的開源)
IdentityServer 使用了Apache 2的開源許可掩缓,允許在它上面構(gòu)建商業(yè)產(chǎn)品雪情,它也是.NET Foundation的一部分,提供了法律支持和治理你辣。
Free and Commercial Support(免費和商業(yè)支持)
如果你需要幫助構(gòu)建或運行您的身份平臺巡通,請讓我們知道,我們有幾種方法可以幫組你舍哄。
The Big Picture
大多數(shù)現(xiàn)代應(yīng)用程序或多或少都是這樣的:
最常見的互動是:
瀏覽器與Web 應(yīng)用程序的通信
Web應(yīng)用程序與Web api進(jìn)行通信(有時是自己的,也有代表用戶的)
基于瀏覽器的應(yīng)用程序與web apis通信
Native applications 與 web APIs通信
基于服務(wù)器的應(yīng)用程序與Web api通信
web api 與web api 進(jìn)行通信(有時是自己的表悬,有時代表用戶)
通常,每個層(前端蟆沫,中間層和后端)都必須保護(hù)資源,并實現(xiàn)身份驗證/或授權(quán) --通常是針對同一個用戶存儲的饥追。
將這些基本安全功能外包給安全令牌服務(wù)图仓,可以防止在這些應(yīng)用程序和端點之間復(fù)制該功能,
對應(yīng)用程序進(jìn)行重構(gòu)以支持安全令牌服務(wù)救崔,這將導(dǎo)致以下體系和協(xié)議:
這樣的設(shè)計將安全問題分為兩部分:
Authentication
當(dāng)應(yīng)用程序需要了解當(dāng)前用戶的身份時,需要進(jìn)行身份驗證六孵。通常纬黎,這些應(yīng)用程序為了去管理數(shù)據(jù)和需要去確保這個用戶能被與允許連接這些數(shù)據(jù)。最常見的例子就是web 應(yīng)用程序劫窒,但是是基于native和JS的應(yīng)用程序也需要去進(jìn)行身份驗證。
OpenID Connect是最新的三個主巍,但它被認(rèn)為是未來,因為它對現(xiàn)代應(yīng)用最有潛力逛艰。它是為移動應(yīng)用場景而建的搞旭,從開始和設(shè)計也是友好的和API。
API Access
應(yīng)用程序有兩種基本的方式與API進(jìn)行通信肄渗。使用application identity,或者委托user’s identity。有時這兩種方法需要結(jié)合使用欠动。
OAurh2 是一種協(xié)議钝的,允許應(yīng)用程序從安全令牌服務(wù)請求訪問令牌,并使用它們與api進(jìn)行通信沿猜,這個委托減少了客戶端應(yīng)用程序和身份驗證和身份驗證之后的api復(fù)雜性碗脊。
OpenID Connect and OAuth 2.0 – better together
OpenID Connect 和OAuth 2.o非常相似--實際上,OpenID Connect 是OAuth2.0的一個擴(kuò)展衙伶,兩個基本的安全問題矢劲,身份驗證和API訪問,被組合成一個單一的協(xié)議--通常是對安全令牌服務(wù)進(jìn)行一次單獨的訪問芬沉。
我們相信阁猜,在可預(yù)見的未來蹋艺,OpenID Connect和OAuth2.0的結(jié)合是確保現(xiàn)代應(yīng)用程序安全的最佳方式民效。身份識別是這兩種協(xié)議的一種實現(xiàn)涛救,它對解決當(dāng)前mobile,native和web 應(yīng)用程序的典型安全問題進(jìn)行了高度優(yōu)化。
How IdentityServer4 can help
IdentityServer 是一個中間件 州叠,符合規(guī)范的OpenID Connect和OAuth 2.0端點應(yīng)用帶任何ASP.NET Core應(yīng)用程序。
通常,您構(gòu)建(或重用)一個包含登錄和注銷頁面的應(yīng)用程序(取決于你的需求)致板,把IdentityServer middleware添加到必要的協(xié)議頭咏窿,因此客戶端應(yīng)用程序可以使用這些標(biāo)準(zhǔn)協(xié)議與之進(jìn)行通信。
托管應(yīng)用程序可以像您希望的那樣復(fù)雜萝挤,但是我們通常建議通過只包含與身份驗證相關(guān)的UI來盡可能小地被攻擊根欧。
Terminology(術(shù)語)
規(guī)范,文檔和object model 使用了一些您應(yīng)該知道的術(shù)語酥泛。
../_images/terminology.png
IdentityServer
IdentityServer是一個OpenID Connect 提供者 - 它實現(xiàn)了OpenID Connect 和 OAuth 2.0協(xié)議嫌拣。
不同的文獻(xiàn)使用不同的術(shù)語來表示相同的角色 - 你可能還會發(fā)現(xiàn)安全令牌服務(wù)security token service,身份提供者identity provider异逐,授權(quán)服務(wù)器authorization server灰瞻, IP-STS 等等
但是燥筷,它們都是一樣的:一款向客戶端提供安全令牌的軟件院崇。
IdentityServer有許多工作和特性 - 包含:
保護(hù)你的資源
通過外部擴(kuò)展的identity provider或本地賬戶對用戶進(jìn)行身份驗證。
提供session 管理和單點登錄
管理和認(rèn)證用戶
向clients發(fā)出標(biāo)識issue identity和訪問令牌谢揪。
驗證tokens
User
用戶是一個使用注冊客戶端client訪問資源的人捐凭,
Client
Client是一個軟件,它從IdentityServer 請求token - 要么是訪問資源(請求身份令牌identity token)茁肠,要么是訪問資源(請求訪問令牌access token)垦梆。Client必須在請求tokens之前首先注冊在IdentityServer 。
Clients的例子是web applications ,native mobile,desktop applications,SPAs,服務(wù)器進(jìn)程等托猩。
Resources
Resources是您想要用IdentityServer 保護(hù)的東西 - 你的用戶身份數(shù)據(jù)或者APIs.
每個resource都有唯一的名稱 - 并且 clients 使用這個名稱來指定他們想要訪問的資源京腥。
Identity data 關(guān)于用戶的身份信息(aka claims) ,例如姓名或電子郵件地址公浪。
APIs APIs resources表示電子client 想要調(diào)用的功能 - 典型的模型是web api ,但也不一定。
Identity Token
identity token(身份token)允許連接 API resource厅各。Clients請求access tokens和將他們轉(zhuǎn)發(fā)到 API.
Access tokens包含了client 的信息 和用戶的(如果存在)晃琳。APIS使用這些信息來授權(quán)訪問他們的數(shù)據(jù)。
Supported Specifications
IdentityServer implements the following specifications:
OpenID Connect
OpenID Connect Core 1.0 (spec)OpenID Connect Discovery 1.0 (spec)OpenID Connect Session Management 1.0 - draft 28 (spec)OpenID Connect Front-Channel Logout 1.0 - draft 02 (spec)OpenID Connect Back-Channel Logout 1.0 - draft 04 (spec)
OAuth 2.0
OAuth 2.0OAuth 2.0 (RFC 6749)OAuth 2.0 Bearer Token Usage (RFC 6750)OAuth 2.0 Multiple Response Types (spec)OAuth 2.0 Form Post Response Mode (spec)OAuth 2.0 Token Revocation (RFC 7009)OAuth 2.0 Token Introspection (RFC 7662)Proof Key for Code Exchange (RFC 7636)JSON Web Tokens for Client Authentication (RFC 7523)
Packaging and Builds(包裝和構(gòu)建)
IdentityServer 由很多nuget包組成人灼。
IdentityServer4
包含了核心的IdentityServer object model,services和middleware顾翼。只包含對內(nèi)存配置和用戶存儲的支持,但是你可以通過配置對其他的存儲進(jìn)行插件支持灸芳。這是其它的 repos 和它的packages的內(nèi)容。
Quickstart UI
包含了一個簡單的用戶界面啟動冯遂,包括登錄谒获,注銷和同意頁面。
Access token validation handler
ASP.NET Core 身份驗證handler 用于驗證tokens 在APIs. handler允許在相同的API中支持JWT 和引用tokens
ASP.NET Core Identity
ASP.NET Core Identity 集成了 package 對于 IdentityServer裸准。package提供了一個簡單的配置API來使用ASP.NET Identity 為你的IdentityServer users提供管理程序庫赔硫。
EntityFramework Core
EntityFramework Core 存儲實現(xiàn)對于EntityFramework Core。這個package提供了EntityFramework的實現(xiàn)對于配置和在IdentityServer操作存儲权悟。
Dev builds(開發(fā)構(gòu)建)
此外惊完,我們還向MyGet發(fā)布了 dev/interim構(gòu)建版本。如果你想試一試小槐,把下面的內(nèi)容添加到你的Visual Studio中凿跳。
https://www.myget.org/F/identity/
Support and Consulting Options
We have several free and commercial support and consulting options for IdentityServer.
Free support
Free support is community-based and uses public forums
StackOverflow
There’s an ever growing community of people using IdentityServer that monitor questions on StackOverflow. If time permits, we also try to answer as many questions as possible
You can subscribe to all IdentityServer4 related questions using this feed:
https://stackoverflow.com/questions/tagged/?tagnames=identityserver4&sort=newest
Please use the IdentityServer4
tag when asking new questions
Gitter
You can chat with other IdentityServer4 users in our Gitter chat room:
https://gitter.im/IdentityServer/IdentityServer4
Reporting a bug
If you think you have found a bug or unexpected behavior, please open an issue on the Github issue tracker. We try to get back to you ASAP. Please understand that we also have day jobs, and might be too busy to reply immediately.
Also check the contribution guidelines before posting.