從壹開始 [ Ids4 ] 之一║ 受權服務器 IdentityServer4 開篇講&計劃書

前言

哈嘍你們週四好!時間過的很快,如今已是三月份了,個人 IdentityServer4 教程也拖了必定的時間了,正好最近有精力學新東西了,主要中間被小夥伴要求寫一個管理後臺,目前1.0已經上線(《權限後臺系統 1.0 正式上線),平時也一直開發維護中,但願能達到更優吧html

開發之餘,晚上的時候,一直慢慢的學習 Id4,通過了大概半個月的簡單資料尋找和學習,對 Id4 有了初步的認識,發現隨着不斷地學習,其實也沒有剛開始學的時候的那種莫名的恐懼感了(有些小夥伴應該會有和我同樣的心情,就是初學一門技術的時候,心裏老是很恐慌的,好比我當時學DDD(地址:《D3模式設計初探 與 個人計劃書),其實我認爲咱們恐慌的不是學不會,而是對學習動力的不自信,大膽的學就對了,哪怕最後只知道OAuth是啥,哪怕最後只會照着套模板,也是一種成功!)。vue

 

從今天起,我將慢慢的更新 IdentityServer4 系列,由於我尚未學習完,因此會一邊學習一邊開發,最後造成一個統一的服務項目,初步打算把全部開源的這些項目(Blog.Vue、Blog.tBug、Blog.Admin、DDD等,相關項目參看開源地址 https://github.com/anjoy8)都集中到這一個受權服務器上,我暫時取名爲 Blog.IdentityServer ,正好有 vue/js 項目,也有 MVC 項目,{把這個系列寫完,先後端分離就差很少了,我也不打算再寫了},至於如何搭建倉庫,如何多項目調用,這我先斟酌下,會在之後的文章中,一一說到,由於要用到 EFCore 來處理用戶數據,我我的感受這仍是一個很實用的項目,畢竟這幾個都是實實在在的有血有肉的工程,不僅是一個簡單的Demo,本身均可以拿來改改優化優化,直接用了(我這王婆賣瓜也是沒誰了😂)。ios

本文只是一個開篇講,不會涉及到內容知識點,有不少小夥伴都是一直看個人文章的,特別是看過我寫的JWT 微軟官方自帶受權認證的《JWT受權》,若是以前的你能看懂,或者八成懂,那麼這個系列確定也能,若是之前的都看不懂,(⊙﹏⊙),只能說我們緣分太淺👍。git

 

廢話很少說,先把我這兩週的小成果展現下,固然,如今很low,之後會各類優化和改進,預計會有十篇文章,github

故事背景小程序

這個是個人第一個 Vue.js 項目 Blog.Vue,(長的很醜,我決定趁着這個機會,把這個美化一下,畢竟我也是看臉的,先用這個練練手,其餘的再慢慢更新受權),這個項目首頁不須要登陸,可是詳情頁須要用戶登陸,以前我是走的 Blog.Core 很普通的登陸,那之後所有會走 Blog.IdentityServer 統一受權服務器了,請注意是兩個端口/域名(Vue是6688端口,Id4是5002端口):後端

 

可能你會感受很簡單,不就是一個客戶端跳轉到受權服務器嘛,而後登陸了再跳轉過來,增長了個用戶角色受權,額,我也感受挺簡單的,但是我一個月前真不是這麼認爲的,當時我感受仍是有點兒難度,如今看起來還能夠,因此說,Id4想入門仍是能夠的,至於後期匹配的微服務了,API網關了,負載均衡了,嗯,來日方長。瀏覽器

 

 

1、目錄

一、源代碼Github

受權服務:https://github.com/anjoy8/Blog.IdentityServer安全

資源服務:https://github.com/anjoy8/Blog.Core服務器

客戶端一:https://github.com/anjoy8/Blog.Admin

 

之後每個項目修改完登陸受權,這裏就列舉一個,爭取把全部項目的受權都遷到 Id4 服務器上。

 

二、本系列文章一覽

 

 

2、到底什麼是 IdentityServer4 ?

 

一、先看看概念

咱們經過查看官網,就看到官方很明顯的定義(下文的必看文檔中有官網地址):

IdentityServer4 is an OpenID Connect and OAuth 2.0 framework for ASP.NET Core 2.

 

IdentityServer是基於OpenID Connect協議標準的身份認證和受權程序,它實現了OpenID Connect 和 OAuth 2.0 協議。

同一種概念,不一樣的文獻使用不一樣的術語,好比你看到有些文獻把他叫作安全令牌服務(Security Token Service),
身份提供(Identity Provider),受權服務器(Authorization Server),IP-STS 等等。其實他們都是一個意思,目的都是在軟件應用中爲客戶端頒發令牌並用於安全訪問的。

IdentityServer有許多功能:

保護你的資源
使用本地賬戶或經過外部身份提供程序對用戶進行身份驗證
提供會話管理和單點登陸
管理和驗證客戶機
向客戶發出標識和訪問令牌
驗證令牌

二、它有什麼優勢?

 

如今的應用開發層出不窮,基於瀏覽器的網頁應用,基於微信的公衆號、小程序,基於IOS、Android的App,基於Windows系統的桌面應用和UWP應用等等,這麼多種類的應用,就給應用的開發帶來的挑戰,咱們除了分別實現各個應用外,咱們還要考慮各個應用之間的交互,通用模塊的提煉,其中身份的認證和受權就是每一個應用必不可少的的一部分。而如今的互聯網,對於信息安全要求又十分苛刻,因此一套統一的身份認證和受權就相當重要。

 

優勢:簡單

所以,從實現者的角度來看,我在OAuth 2中看到的主要優勢是複雜性下降。它不須要請求籤名過程,這是否是很難,但確定是fiddly。它大大減小了做爲服務的客戶端所需的工做,這是(在現代的,移動世界)你最想要最小化疼痛的地方。在服務器 – >內容提供者端的下降的複雜性使其在數據中心中更具可擴展性。

它將標準的一些擴展編碼爲OAuth 1.0a(如xAuth),如今普遍使用。

大多數的應用都如上所示,基本上都是經過客戶端對API進行請求(瀏覽器、Web程序、本機應用程序)等。當你的項目到了必定得範圍和大小以後,就有可能去使用Nginx,這個時候,也必須考慮站點的安全性,由於不能讓你的核心業務信任外界任何的調用.固然還有的時候,咱們的擁有本身的一套API,爲本身服務進行使用,咱們不想讓別人來調用咱們的,這個時候也能夠進行使用。

 

3、開發白皮書

這裏引用下聖傑的圖,聖傑是我知道爲數很少的,知識和Code都很強的大佬,曾經有緣聊過兩句。

 

一、用到了哪些知識點

正如上邊的結構腦圖中顯示的,大概就是這麼多,可能你會感受不少,開始你簡單看一下,有些概念我們在講 JWT 受權的時候,都說過見過,甚至親身用過,好比:JWT(以及其中的iss、sub、expires等等),Claim, Authentication,access_token,還有所謂的API Resource資源。

 

  • OAuth 2.0 簡介  👉
  • OpenID 和 OAuth 的區別  👉
  • 客戶端受權模式(Client Credentials)👉 
  • 密碼受權模式(Resource Owner Password Credentials)👉
  • 受權碼受權模式(Authorization Code Flow,MVC調用)👉
  • 簡化受權模式-OpenID(Implicit Flow,JS/Vue 客戶端調用)👉
  • 混合模式-OpenID & OAuth(Hybrid Flow,角色+策略受權)👉
  • 集成 ASP.NET Core Identity and EntityFramework Core  👉
  • 單點登陸  👉
  • 刷新登陸 RefreshToken  👉
  • 外部登陸(好比QQ、Google、Github等)👉

 

二、部分結構/流程圖

 

(Authorization Code)

 

 

(使用 OpenID Connect 的身份驗證流)

 

三、必看文檔

我一直堅信,只要把官方文檔啃透了,確定能學會,至少會七成,好多人都沒有養成這個習慣,就直接看Demo了,但願你們仍是先看看文檔。

IdentityServer4:https://identityserver4.readthedocs.io/en/latest/

OAuth2.0:https://oauth.net/2/

OpenID Connect:https://openid.net/connect/

 

 

4、特別鳴謝

一、https://docs.azure.cn/zh-cn/active-directory/develop/authentication-scenarios

二、https://github.com/IdentityServer/IdentityServer4.Samples

三、IdentityServer4 for OpenID Connect 和 OAuth 2.0

四、identity server 4

 

 

5、Github && Gitee 

 之後會上傳本系列 Id4 倉庫...

 

---END

相關文章
相關標籤/搜索