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

以下思路參考于 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)建或運行您的身份平臺巡通,請讓我們知道,我們有幾種方法可以幫組你舍哄。

let us know

The Big Picture

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

../_images/appArch.png

最常見的互動是:

  • 瀏覽器與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é)議:

image

這樣的設(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)行通信。

image

托管應(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

nuget | github

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

Quickstart UI

github

包含了一個簡單的用戶界面啟動冯遂,包括登錄谒获,注銷和同意頁面。

Access token validation handler

nuget | github

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

ASP.NET Core Identity

nuget | github

ASP.NET Core Identity 集成了 package 對于 IdentityServer裸准。package提供了一個簡單的配置API來使用ASP.NET Identity 為你的IdentityServer users提供管理程序庫赔硫。

EntityFramework Core

nuget | github

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.

還有 63% 的精彩內(nèi)容
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
支付 ¥2.99 繼續(xù)閱讀
  • 序言:七十年代末控嗜,一起剝皮案震驚了整個濱河市骡显,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌壁顶,老刑警劉巖溜歪,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異调衰,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)嚎莉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進(jìn)店門趋箩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人阁簸,你說我怎么就攤上這事∩秆希” “怎么了饶米?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵檬输,是天一觀的道長。 經(jīng)常有香客問我丧慈,道長,這世上最難降的妖魔是什么鹃愤? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任完域,我火速辦了婚禮,結(jié)果婚禮上凹耙,老公的妹妹穿的比我還像新娘肠仪。我一直安慰自己,他們只是感情好藤韵,可當(dāng)我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著欲险,像睡著了一般。 火紅的嫁衣襯著肌膚如雪槐壳。 梳的紋絲不亂的頭發(fā)上喜每,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天,我揣著相機(jī)與錄音枫笛,去河邊找鬼刚照。 笑死,一個胖子當(dāng)著我的面吹牛无畔,可吹牛的內(nèi)容都是我干的浑彰。 我是一名探鬼主播恭理,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼颜价,長吁一口氣:“原來是場噩夢啊……” “哼诉濒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起循诉,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤茄猫,失蹤者是張志新(化名)和其女友劉穎困肩,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體勇劣,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年幻捏,在試婚紗的時候發(fā)現(xiàn)自己被綠了命咐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡榛臼,死狀恐怖窜司,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情金刁,我是刑警寧澤织咧,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站笙蒙,受9級特大地震影響抵屿,放射性物質(zhì)發(fā)生泄漏捅位。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一尿扯、第九天 我趴在偏房一處隱蔽的房頂上張望焰雕。 院中可真熱鬧,春花似錦辟宗、人聲如沸吝秕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至缩挑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間镜遣,已是汗流浹背士袄。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留寓辱,地道東北人赤拒。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像挎挖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子崔涂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,843評論 2 354