安裝完成後經過AddIdentityServer方法將相關的服務註冊到容器中,同時這裏返回一個builder用於繼續構建IdentityServer服務,如存儲、緩存、加密相關的密鑰等等;html
這個問題的緣由在於,IdentityServer4在進行受權時其實是依賴一系列數據的,這些數據包括Client、Resource、Scope等,因此爲了保證受權相關操做可以完成,須要配置相關數據的存儲服務,IdentityServer4默認提供了測試基於內存的數據存儲,但通常只是用於測試目的:git
關於數據持久化,在.net技術棧中能夠想到的就是Entity Framework,同時IdentityServer4提供了名爲:IdentityServer4.EntityFramework的包,它包含了相關的實體類型(IdentityServer4.EntityFramework.Storage)以及EF的DbContext。因此引入IdentityServer4.EntityFramework包就能夠實現基於EF的數據持久化,另外也能夠本身實現。github
上圖中能夠看到IdentityServer4關於EF的包有2個,可是實際上安裝IdentityServer4.EntityFramework就包含Storage這個包了:docker
安裝完成以後,咱們能夠在IdentityServer4.EntityFramework.Storage包中找到如下兩個DbContext類型:shell
而後就能夠對IdentityServer的存儲進行配置了:數據庫
以上主要是對數據庫連接字符串、數據庫版本、字符集以及數據庫遷移程序集進行配置,須要注意的是在對數據庫進行遷移的時候默認使用DbContext所在的程序集,而IdentityServer4提供的DbContext位於IdentityServer4.EntityFramework.Storage包裏面,因此爲了可以確保遷移文件正常生成,因此須要將Startup所在的程序集設爲遷移程序集(注:更適合的方式是專門建立一個數據庫遷移項目來做爲遷移程序集,這樣數據庫遷移的相關內容能夠單獨維護)。緩存
注:-c和-o分別是-Context 和-OutputDir 的簡寫,在參數沒有二義性時可使用簡寫。服務器
執行數據庫更新命令後,數據庫將完成建立:ide
數據庫也就建立好了:工具
啓動程序,並訪問https://localhost:55006/.well-known/openid-configuration便可看到如下內容,證實IdentityServer4已經成功啓動了:
注:關於IdentityServer4的默認數據可經過命令「dotnet new -i IdentityServer4.Templates」先安裝IdentityServer4相關模板,而後使用「dotnet new is4ef」命令來建立,具體參考文檔:https://identityserver4.readthedocs.io/en/latest/quickstarts/5_entityframework.html
設置API的受權訪問:
成功訪問,可是這裏有個小細節須要注意一下,就是當獲取到access token後,在token的有效期內,哪怕是把IdentityServer關閉,也能使用token正常訪問受保護資源,換句話說access token頒發後就與IdentityServer無關了,以上內容其實是使用Asp.Net core 5.0以及IdentityServer4實現了一個基於客戶端證書(Client Credentials)的Oauth2.0受權流程,但IdentityServer提供的內容不只於此,後續文章將會對該IdentityServer繼續完善,使其成爲一個功能完善的身份驗證服務。