dotnet new -i IdentityServer4.Templates
多出來的這些模板
adminUI用來測試,想要用再生產環境,須要交錢
結合core的 Identity來使用
使用EF core把一些數據持久化到數據庫裏了
內存來存儲信息
html
建立一個內存裏的項目叫作 Idp
VS打開項目
直接運行:
這裏看起來有點亂,這裏顯示註釋掉
把上面這三被註釋的代碼放開註釋:
這裏添加用戶,添加了一個測試用戶
查看TestUser的源碼
他是在代碼裏寫死了兩個用戶;
往內存裏添加 客戶端應用:
查看GetClients()這個方法的源碼
數據庫
受權類型是簡化模式
再看這兩行代碼:
進去看源碼:
表示的是Identity資源
Identity provider這個服務器上,它有一些用戶的身份認證信息,這些信息能夠看作一種被保護的資源。只不過這個資源和Identity Server是在一塊兒的
其餘的APi資源沒有和Identity在一塊兒。
至關於這裏的Identity data 也至關因而一種資源,也是被保護的
目前這些都是寫死在代碼裏 ,加載到內存裏的。若是使用EFCode的模板,這些東西均可以存到數據庫裏。
比較大的應用一般都是存到數據庫裏
OAth的受權方式,前面四個能夠用代碼來實驗
。
先從簡單的開始講,講第四個 Client Credentials:客戶端憑證,。而後再講Password的例子
把一些沒用的代碼刪除掉,。只保留一個Client而後進行修改
這裏的api1先去掉,。不讓它訪問這個資源
把這個程序運行起來就能夠不用管了。而後建立一個控制檯應用
它做爲Identity的客戶端應用,
須要安裝一個庫
https://identityserver4.readthedocs.io/en/latest/quickstarts/1_client_credentials.html
包含了一個Client libiary,可使用discovery endpoint.
discovery endpoint裏面有什麼東西呢?點擊這個運行起來的Identity4的例子頁面
Task.Run的寫法 須要手動捕獲異常
C#7.1之後還有一種簡便的方法:
這麼寫報錯,而後查看錯誤
項目文件添加這句話
這個時候錯誤就沒有了。
若是報錯就輸出異常
由於使用的是ClientCrenditals客戶端憑據的方式,就須要提供這個憑據。就是加密用的這個字符串
這倆都是擴展方法,是剛纔裝的Identity Model庫裏面提供的
方法裏面須要一個參數ClientCrdentialsTokenRequest,這裏面須要設置一些值
加斷點進行調試
錯誤類型
修改成正確的Secret
此次的錯誤信息是 invalid_scope
這是由於服務端的Scope是空的
把服務端的Scope修改成api1
客戶端也改爲api1。這樣就成功訪問到了。
這是AccessToken
api
有了Access Token 就能夠Call APi了。可是咱們還有API資源。Identity Server 4上有一部分身份認證的資源。咱們就先訪問這一部分資源
服務端須要配置一下,目前只容許訪問了api1資源,可是api1還不存在
IdentityResource裏面分紅了幾塊。點一下出來這些這5個
這裏定義資源,只定義了兩個
設置容許訪問OpenId,這裏就設置了容許訪問的兩個資源,一個是api1 一個是身份證資源裏面的openId這個Scope
而後運行服務端
客戶端的修改:這裏也加上openid都是小寫?Scope之間用空格分開
爲何都是小寫的呢 咱們能夠在服務端的代碼裏面F12進去看源碼
服務器
首先服務端這麼設置
客戶端這麼設置
測試;請求失敗了
從新。服務端加上openid
客戶端也加上openid,運行後仍是錯誤的,這是爲何呢
clientCrdentails不表明任何用戶,而我這裏卻想訪問身份認證的資源,身份認證資源就是對應着用戶了。因此說這種訪問是合理的mvc
使用VScode創建的一個新項目
返回用戶的Claims
官方文檔的代碼直接貼進來
這裏必定要寫對了api1
須要身份證,而後須要使用mvc
端口改爲5001
VSCode運行程序
設置控制檯的地址
而後再運行控制檯應用
斷點就走到了 VScode的程序
控制檯訪問成功打印 輸出的結果。從api獲取的數據
ide