Identity Server 4 原理和實戰(完結)_創建Identity Server 4項目,Client Credentials 受權實例






建立項目

 

dotnet new -i IdentityServer4.Templates



多出來的這些模板

adminUI用來測試,想要用再生產環境,須要交錢

結合core的 Identity來使用

使用EF core把一些數據持久化到數據庫裏了

內存來存儲信息
html

建立項目

建立一個內存裏的項目叫作 Idp

VS打開項目



直接運行:


這裏看起來有點亂,這裏顯示註釋掉

把上面這三被註釋的代碼放開註釋:

這裏添加用戶,添加了一個測試用戶

查看TestUser的源碼



他是在代碼裏寫死了兩個用戶;

往內存裏添加 客戶端應用:

查看GetClients()這個方法的源碼
數據庫

credential 憑證









受權類型是簡化模式

再看這兩行代碼:

進去看源碼:


表示的是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

訪問API


有了Access Token 就能夠Call APi了。可是咱們還有API資源。Identity Server 4上有一部分身份認證的資源。咱們就先訪問這一部分資源
服務端須要配置一下,目前只容許訪問了api1資源,可是api1還不存在


IdentityResource裏面分紅了幾塊。點一下出來這些這5個

這裏定義資源,只定義了兩個

設置容許訪問OpenId,這裏就設置了容許訪問的兩個資源,一個是api1 一個是身份證資源裏面的openId這個Scope

而後運行服務端

客戶端的修改:這裏也加上openid都是小寫?Scope之間用空格分開

爲何都是小寫的呢 咱們能夠在服務端的代碼裏面F12進去看源碼



服務器

測試

首先服務端這麼設置

客戶端這麼設置

 
測試;請求失敗了


從新。服務端加上openid

客戶端也加上openid,運行後仍是錯誤的,這是爲何呢

clientCrdentails不表明任何用戶,而我這裏卻想訪問身份認證的資源,身份認證資源就是對應着用戶了。因此說這種訪問是合理的mvc

創建APi1資源

使用VScode創建的一個新項目


返回用戶的Claims

官方文檔的代碼直接貼進來

這裏必定要寫對了api1


須要身份證,而後須要使用mvc

端口改爲5001

VSCode運行程序


設置控制檯的地址


而後再運行控制檯應用
斷點就走到了 VScode的程序





控制檯訪問成功打印 輸出的結果。從api獲取的數據






 ide

相關文章
相關標籤/搜索