歡迎光臨
每天分享高質量文章

從壹開始 [ Id4 ] 之一║ 授權伺服器 IdentityServer4 開篇講&計劃書

哈嘍大家週四好!時間過的很快,現在已經是三月份了,我的 IdentityServer4 教程也拖了一定的時間了,正好最近有精力學新東西了,主要中間被小夥伴要求寫一個管理後臺,目前1.0已經上線(《許可權後臺系統 1.0 正式上線》),平時也一直開發維護中,希望能達到更優吧。

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

從今天起,我將慢慢的更新 IdentityServer4 系列,因為我還沒有學習完,所以會一邊學習一邊開發,最後形成一個統一的服務專案,初步打算把所有開源的這些專案(Blog.Vue、Blog.tBug、Blog.Admin、DDD等,相關專案參看開源地址 https://github.com/anjoy8)都集中到這一個授權伺服器上,我暫時取名為 Blog.IdentityServer ,正好有 vue/js 專案,也有 MVC 專案,{把這個系列寫完,前後端分離就差不多了,我也不打算再寫了},至於如何搭建倉庫,如何多專案呼叫,這我先斟酌下,會在以後的文章中,一一說到,因為要用到 EFCore 來處理使用者資料,我個人感覺這還是一個很實用的專案,畢竟這幾個都是實實在在的有血有肉的工程,不只是一個簡單的Demo,自己都可以拿來改改最佳化最佳化,直接用了(我這王婆賣瓜也是沒誰了?)。

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

廢話不多說,先把我這兩周的小成果展示下,當然,現在很low,以後會各種最佳化和改進,預計會有十篇文章,

故事背景

這個是我的第一個 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、本系列文章一覽

  • 01 ║ 授權伺服器 IdentityServer4 開篇講&計劃書
  • 02 ║ 基礎知識集合 & 專案搭建一

1、先看看概念

我們透過檢視官網,就看到官方很明顯的定義(下文的必看檔案中有官網地址):

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有許多功能:

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

2、它有什麼優點?

 

現在的應用開發層出不窮,基於瀏覽器的網頁應用,基於微信的公眾號、小程式,基於IOS、Android的App,基於Windows系統的桌面應用和UWP應用等等,這麼多種類的應用,就給應用的開髮帶來的挑戰,我們除了分別實現各個應用外,我們還要考慮各個應用之間的互動,通用模組的提煉,其中身份的認證和授權就是每個應用必不可少的的一部分。而現在的網際網路,對於資訊保安要求又十分苛刻,所以一套統一的身份認證和授權就至關重要。

優點:簡單

因此,從實現者的角度來看,我在OAuth 2中看到的主要優點是複雜性降低。它不需要請求簽名過程,這是不是很難,但肯定是fiddly。它大大減少了作為服務的客戶端所需的工作,這是(在現代的,移動世界)你最想要最小化疼痛的地方。在伺服器 – >內容提供者端的降低的複雜性使其在資料中心中更具可擴充套件性。

它將標準的一些擴充套件編碼為OAuth 1.0a(如xAuth),現在廣泛使用。

大多數的應用都如上所示,基本上都是透過客戶端對API進行請求(瀏覽器、Web程式、本機應用程式)等。當你的專案到了一定得範圍和大小之後,就有可能去使用Nginx,這個時候,也必須考慮站點的安全性,因為不能讓你的核心業務信任外界任何的呼叫.當然還有的時候,我們的擁有自己的一套API,為自己服務進行使用,我們不想讓別人來呼叫我們的,這個時候也可以進行使用。

這裡取用下聖傑的圖,聖傑是我知道為數不多的,知識和Code都很強的大佬,曾經有緣聊過兩句。

1、用到了哪些知識點

正如上邊的結構腦圖中顯示的,大概就是這麼多,可能你會感覺很多,開始你簡單看一下,有些概念咱們在講 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等)?

2、部分結構/流程圖

 

(Authorization Code)

 

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

3、必看檔案

我一直堅信,只要把官方檔案啃透了,肯定能學會,至少會七成,好多人都沒有養成這個習慣,就直接看Demo了,希望大家還是先看看檔案。

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

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

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

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

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

3、IdentityServer4 for OpenID Connect 和 OAuth 2.0

4、identity server 4

 以後會上傳本系列 Id4 倉庫…

已同步到看一看
贊(0)

分享創造快樂