原創(chuàng) | Authentication & Authorization | SSO Analyze in ASP.NET Core

以下思路參考于 IdentityServer4 源碼,流程。閱讀文章請(qǐng) 先 熟悉 OAuth 2.0, Open ID ,Open ID Connect 。本文章已申請(qǐng)授權(quán)騎士處理,轉(zhuǎn)載請(qǐng)注明出處。
存儲(chǔ)于 本機(jī) Markdown文檔。 | 待更新。

IdentityServer4是一個(gè)針對(duì) ASP.NET Core 2.0 的OpenID Connect 和 OAuth 2.0框架。

在你的應(yīng)用中,它支持以下特性:

Authentication as a Service

所有應(yīng)用程序的集中登錄邏輯和工作流(web,native,mobile,services),IdentityServer 是一個(gè)官方認(rèn)證的OpenID Connect的實(shí)現(xiàn)。

Single Sign-on / Sign-out

在多個(gè)應(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等外部的身份驗(yàn)證提供者,這將保護(hù)你的應(yīng)用程序從如何連接到這些外部提供程序的細(xì)節(jié)。

Focus on Customization(專注于定制)

最重要的一部分--IdentityServer 的很多方面都可以定制,以滿足你的需求,由于IdentityServer 是一個(gè)框架,而不是一個(gè)boxed product或者一個(gè)SaaS,所以你可以編寫代碼來對(duì)系統(tǒng)進(jìn)行調(diào)整,以適應(yīng)您的場(chǎng)景。

Mature Open Source(成熟的開源)

IdentityServer 使用了Apache 2的開源許可,允許在它上面構(gòu)建商業(yè)產(chǎn)品,它也是.NET Foundation的一部分,提供了法律支持和治理。

Free and Commercial Support(免費(fèi)和商業(yè)支持)

如果你需要幫助構(gòu)建或運(yùn)行您的身份平臺(tái),請(qǐng)讓我們知道,我們有幾種方法可以幫組你。

let us know

The Big Picture

大多數(shù)現(xiàn)代應(yīng)用程序或多或少都是這樣的:

../_images/appArch.png

最常見的互動(dòng)是:

  • 瀏覽器與Web 應(yīng)用程序的通信

  • Web應(yīng)用程序與Web api進(jìn)行通信(有時(shí)是自己的,也有代表用戶的)

  • 基于瀏覽器的應(yīng)用程序與web apis通信

  • Native applications 與 web APIs通信

  • 基于服務(wù)器的應(yīng)用程序與Web api通信

  • web api 與web api 進(jìn)行通信(有時(shí)是自己的,有時(shí)代表用戶)

通常,每個(gè)層(前端,中間層和后端)都必須保護(hù)資源,并實(shí)現(xiàn)身份驗(yàn)證/或授權(quán) --通常是針對(duì)同一個(gè)用戶存儲(chǔ)的。

將這些基本安全功能外包給安全令牌服務(wù),可以防止在這些應(yīng)用程序和端點(diǎn)之間復(fù)制該功能,

對(duì)應(yīng)用程序進(jìn)行重構(gòu)以支持安全令牌服務(wù),這將導(dǎo)致以下體系和協(xié)議:

image

這樣的設(shè)計(jì)將安全問題分為兩部分:

Authentication

當(dāng)應(yīng)用程序需要了解當(dāng)前用戶的身份時(shí),需要進(jìn)行身份驗(yàn)證。通常,這些應(yīng)用程序?yàn)榱巳ス芾頂?shù)據(jù)和需要去確保這個(gè)用戶能被與允許連接這些數(shù)據(jù)。最常見的例子就是web 應(yīng)用程序,但是是基于native和JS的應(yīng)用程序也需要去進(jìn)行身份驗(yàn)證。

OpenID Connect是最新的三個(gè),但它被認(rèn)為是未來,因?yàn)樗鼘?duì)現(xiàn)代應(yīng)用最有潛力。它是為移動(dòng)應(yīng)用場(chǎng)景而建的,從開始和設(shè)計(jì)也是友好的和API。

API Access

應(yīng)用程序有兩種基本的方式與API進(jìn)行通信。使用application identity,或者委托user’s identity。有時(shí)這兩種方法需要結(jié)合使用。

OAurh2 是一種協(xié)議,允許應(yīng)用程序從安全令牌服務(wù)請(qǐng)求訪問令牌,并使用它們與api進(jìn)行通信,這個(gè)委托減少了客戶端應(yīng)用程序和身份驗(yàn)證和身份驗(yàn)證之后的api復(fù)雜性。

OpenID Connect and OAuth 2.0 – better together

OpenID Connect 和OAuth 2.o非常相似--實(shí)際上,OpenID Connect 是OAuth2.0的一個(gè)擴(kuò)展,兩個(gè)基本的安全問題,身份驗(yàn)證和API訪問,被組合成一個(gè)單一的協(xié)議--通常是對(duì)安全令牌服務(wù)進(jìn)行一次單獨(dú)的訪問。

我們相信,在可預(yù)見的未來,OpenID Connect和OAuth2.0的結(jié)合是確保現(xiàn)代應(yīng)用程序安全的最佳方式。身份識(shí)別是這兩種協(xié)議的一種實(shí)現(xiàn),它對(duì)解決當(dāng)前mobile,native和web 應(yīng)用程序的典型安全問題進(jìn)行了高度優(yōu)化。

How IdentityServer4 can help

IdentityServer 是一個(gè)中間件 ,符合規(guī)范的OpenID Connect和OAuth 2.0端點(diǎn)應(yīng)用帶任何ASP.NET Core應(yīng)用程序。

通常,您構(gòu)建(或重用)一個(gè)包含登錄和注銷頁面的應(yīng)用程序(取決于你的需求),把IdentityServer middleware添加到必要的協(xié)議頭,因此客戶端應(yīng)用程序可以使用這些標(biāo)準(zhǔn)協(xié)議與之進(jìn)行通信。

image

托管應(yīng)用程序可以像您希望的那樣復(fù)雜,但是我們通常建議通過只包含與身份驗(yàn)證相關(guān)的UI來盡可能小地被攻擊。

Terminology(術(shù)語)

規(guī)范,文檔和object model 使用了一些您應(yīng)該知道的術(shù)語。

../_images/terminology.png

IdentityServer

IdentityServer是一個(gè)OpenID Connect 提供者 - 它實(shí)現(xiàn)了OpenID Connect 和 OAuth 2.0協(xié)議。

不同的文獻(xiàn)使用不同的術(shù)語來表示相同的角色 - 你可能還會(huì)發(fā)現(xiàn)安全令牌服務(wù)security token service,身份提供者identity provider,授權(quán)服務(wù)器authorization server, IP-STS 等等

但是,它們都是一樣的:一款向客戶端提供安全令牌的軟件。

IdentityServer有許多工作和特性 - 包含:

  • 保護(hù)你的資源

  • 通過外部擴(kuò)展的identity provider或本地賬戶對(duì)用戶進(jìn)行身份驗(yàn)證。

  • 提供session 管理和單點(diǎn)登錄

  • 管理和認(rèn)證用戶

  • 向clients發(fā)出標(biāo)識(shí)issue identity和訪問令牌。

  • 驗(yàn)證tokens

User

用戶是一個(gè)使用注冊(cè)客戶端client訪問資源的人,

Client

Client是一個(gè)軟件,它從IdentityServer 請(qǐng)求token - 要么是訪問資源(請(qǐng)求身份令牌identity token),要么是訪問資源(請(qǐng)求訪問令牌access token)。Client必須在請(qǐng)求tokens之前首先注冊(cè)在IdentityServer 。

Clients的例子是web applications ,native mobile,desktop applications,SPAs,服務(wù)器進(jìn)程等。

Resources

Resources是您想要用IdentityServer 保護(hù)的東西 - 你的用戶身份數(shù)據(jù)或者APIs.

每個(gè)resource都有唯一的名稱 - 并且 clients 使用這個(gè)名稱來指定他們想要訪問的資源。

Identity data 關(guān)于用戶的身份信息(aka claims) ,例如姓名或電子郵件地址。

APIs APIs resources表示電子client 想要調(diào)用的功能 - 典型的模型是web api ,但也不一定。

Identity Token

identity token(身份token)允許連接 API resource。Clients請(qǐng)求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

nuget | github

包含了核心的IdentityServer object model,services和middleware。只包含對(duì)內(nèi)存配置和用戶存儲(chǔ)的支持,但是你可以通過配置對(duì)其他的存儲(chǔ)進(jìn)行插件支持。這是其它的 repos 和它的packages的內(nèi)容。

Quickstart UI

github

包含了一個(gè)簡(jiǎn)單的用戶界面啟動(dòng),包括登錄,注銷和同意頁面。

Access token validation handler

nuget | github

ASP.NET Core 身份驗(yàn)證handler 用于驗(yàn)證tokens 在APIs. handler允許在相同的API中支持JWT 和引用tokens

ASP.NET Core Identity

nuget | github

ASP.NET Core Identity 集成了 package 對(duì)于 IdentityServer。package提供了一個(gè)簡(jiǎn)單的配置API來使用ASP.NET Identity 為你的IdentityServer users提供管理程序庫。

EntityFramework Core

nuget | github

EntityFramework Core 存儲(chǔ)實(shí)現(xiàn)對(duì)于EntityFramework Core。這個(gè)package提供了EntityFramework的實(shí)現(xiàn)對(duì)于配置和在IdentityServer操作存儲(chǔ)。

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.

還有 63% 的精彩內(nèi)容
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
支付 ¥2.99 繼續(xù)閱讀

友情鏈接更多精彩內(nèi)容