日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

IdentityServer4之持久化很顺手的事

發布時間:2023/12/4 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IdentityServer4之持久化很顺手的事 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

原計劃打算在春節期間多分享幾篇技術文章的,但到最后一篇也沒出,偷懶了嗎?算是吧,過程是這樣的:每次拿出電腦,在孩姥姥家的院子總有陽光沐浴,看不清屏幕,回屋又有點冷(在強行找理由),于是又帶著娃遛彎去啦。哪有那么多理由,就是想偷個懶;不過后面幾天把計算機組成原理簡單過了過,后面整理整理再單獨給小伙伴分享吧。

這次接著IdentityServer4說,之前一直用內存數據進行測試演示,在正式項目中肯定是要存數據庫的(除非數據固定,用內存方式實現);接下來就用Demo實操的過程說說IdentityServer4的持久化。

正文

IdentityServer4已經對EF Core有很好的支持與封裝,用很少的代碼就能實現數據持久化,重點還是需要對EF Core有所了解,如果還有不了解的小伙伴,請先花幾分鐘看看之前分享的關于EF Core的文章(跟我一起學.NetCore之EF Core 實戰入門,一看就會)。

主要需要nuget包如下:

  • IdentityServer4:這個包是IdentityServer4的核心包,項目中只要使用IdentityServer4,就必須引入此包;

  • IdentityServer4.EntityFramework:這個包是IdentityServer4針對EF進行封裝的包,支持使用EF進行數據的持久化;

  • Microsoft.EntityFrameworkCore.SqlServer:針對不同的數據庫引入不同的EF包,這里使用的是微軟提供的本地數據庫,所以引入的SqlServer;

  • Microsoft.EntityFrameworkCore.Tools:如果需要在程序的包管理控制臺進行遷移操作,就需要在指定程序集中安裝此包;

  • Microsoft.EntityFrameworkCore.Design:如果需要在命令行中進行遷移操作,就需要在指定程序集中安裝此包;

注:Demo演示采用的是包管理控制臺的方式進行遷移操作;命令行的方式思路是一樣的,只是使用的命令稍微有點不同;

Demo走起來

  • 項目準備

    這里就不從頭到尾敲代碼啦,把上一節Authorization Code的代碼拷貝過來,重點還是關注持久化的過程(這個理由棒棒噠)。

    源碼地址:https://github.com/zyq025/IDS4Demo/tree/main/AuthorizationCode。

  • 開始擼碼

    先把包都引入到程序中,如下圖:


    然后在Startup.cs文件中,將原來的內存模式改為從數據庫中讀取即可;其實最關鍵的就是IdentityServer4封裝好的兩個上下文:

    ConfigurationDbContext:這個上下文主要是針對配置數據,比如客戶端(Client)、資源(Resources)等;

    PersistedGrantDbContext:這個上下文主要是針對用戶授權操作時的數據和臨時數據,比如同意授權的數據、Token等;

    在代碼中只需要針對這這兩個上下文指定數據庫就行啦,如果沒有什么自定義需求,不用其他配置,如下:

  • 遷移就完事啦

    代碼擼完啦,剩下的就是EF遷移的幾步走就完事啦(這里演示用的包管理控制臺):

    注:如果程序中有多個上下文,如果不指定上下文,遷移會報錯,因為程序不知要遷移哪個。

    • 新增遷移

      指定ConfigurationDbContext


      指定PersistedGrantDbContext


      參數簡要說明:

      -Context :指定上下文進行遷移;

      -OutputDir:遷移生成的文件存放路徑;

      最后遷移的文件結果如下:

    • 根據遷移文件,同步到數據庫中

      先同步ConfigurationDbContext

      這時候對應的數據庫就生成了,而且對應配置相關的表已經在數據庫創建:

      再同步PersistedGrantDbContext

      這個表少,就兩張:


      其實這樣就已經可以啦,只要在數據庫對應的表中添加對應的數據,就能進行操作啦;?那新手小伙伴肯定得苦惱啦,這么多表,咋知道哪個表存啥數據啊;不急,咱們把原來內存中的數據存進去,然后再看看每個表存了啥,這不就更加明了啦,比一個一個表說的還直接,這種方式還能促使小伙伴動手,不然都不知道里面存了啥(哈哈哈,高招)。那就多出來第四步,如下……

    4. 加個種子數據美美噠

    這里說的種子數據就是指原來在內存中數據,把它們讀出來存到數據庫中就行;很簡單,通過上文直接存即可,代碼如下:


    方法寫好啦,直接在Configure中調用即可,如下:


    這樣就完工啦,把授權服務器、資源服務器、客戶端都啟動,走一遍流程,看看是不是成功啦,不出意外一切順利,這時再返過來看看每個表中都存啥數據,就真的很清晰啦。這里就不一一截圖說,相信小伙伴都能搞得明白。

    到這肯定有小伙伴要說話啦,用戶那還是用的內存;之所以沒放到上面一起說,那是因為用戶這塊的控制權完全在我們自己手里,可以自己設計(就是用戶、菜單、角色那一套),也可以集成微軟封裝好的Identity(把常用的用戶那一套已經封裝啦)。

    這里演示肯定挑著爽的玩,就集成微軟封裝好的Identity,來,繼續擼碼:

  • 引入相關nuget包:


    引入的包簡單說明

    IdentityServer4.AspNetIdentity:IdentityServer4對微軟封裝的Indentity的支持;

    Microsoft.AspNetCore.Identity.EntityFrameworkCore:對Identity提供EF支持;

  • 擼碼就對了

    因為IdentityDbContext是抽象類,不能直接使用,這里需要針對IdentityDbContext定義一個子類ApplicationDbContext,如下:


    然后在Startup.cs中注冊相關服務即可:

  • 遷移及同步:這里沒有指定輸出路徑,小伙伴根據自己的需要進行指定。


    數據庫中生成相關的表,如下:

  • 更改登錄和登出邏輯;


    登出的時調用 _signInManager.SignOutAsync();即可

  • 加點種子數據,即程序啟動時加入用戶數據;


    方法寫好,同樣在Configure中調用即可,種子數據準備好之后,就可以用Zoe用戶進行登錄啦,密碼就是Zoe123456&

  • 這里就不專門針對微軟封裝的Identity說的那么細啦,小伙伴可以參考文檔:https://docs.microsoft.com/zh-cn/aspnet/identity/overview/getting-started/introduction-to-aspnet-identity。

    總結

    IdentityServer4的入門暫時先到這篇吧,后續會在實戰項目中進行使用分享。下一節先來說說服務發現。

    一個被程序搞丑的帥小伙,關注"Code綜藝圈",跟我一起學~

    總結

    以上是生活随笔為你收集整理的IdentityServer4之持久化很顺手的事的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。