在《Asp.Net Core: Swagger 與 Identity Server 4》一文中介紹瞭如何生成受保護的Web Api的Swagger文件,本文介紹使用PostMan Canary測試受Identity Server 4保護的Web Api。
首先搭建一下Identity Server 4的環境,並且建立一個測試用的Web Api和訪問Web Api的客戶端,這部分在系列文章《Identity Server 4 從入門到落地》中有詳細的介紹。
Identity Server 4 Admin的程式碼和測試用Web Api和Client的程式碼可以從Github下載:
https://github.com/zhenl/IDS4Admin
https://github.com/zhenl/IDS4ClientDemo
這裡只列出測試用Web Api專案appsettings.json中的配置項:
"IdentityServer4Api": {
"Authority": "http://host.docker.internal:4010",
"CorsOrgins": [
"http://host.docker.internal:5291"
],
"Policies": [
{
"Name": "ApiScope",
"RequireAuthenticatedUser": "true",
"Claims": [
{
"ClaimType": "scope",
"AllowValues": [ "testapi" ]
}
]
}
],
訪問這個Web Api的測試用Web應用appsettings.json中相關配置項:
"IdentityServer4Client": {
"Authority": "http://host.docker.internal:4010",
"ClientId": "testclient",
"ClientSecret": "secret",
"ResponseType": "code",
"SaveTokens": "true",
"RequireHttpsMetadata": "false",
"Scopes": [ "openid", "profile", "testapi" ],
"JsonKeys": []
}
我們使用最新的PostMan Canary進行測試,下載地址https://www.postman.com/downloads/canary/。安裝完成後,就可以訪問Web Api了。
如果直接訪問 Web Api,會提示401錯誤:
我們需要在PostMan中實現認證,才能訪問受保護的Web Api。我們已經在認證中心設定了可以訪問Web Api的Client,資訊如下:
Client ID | testclient |
Client Secret | secret |
Callback URL | http://host.docker.internal:5291/signin-oidc |
Web Api Scope | Scope |
現在,在PostMan中進入Authorization分頁:
選擇認證型別為OAuth2.0:
在右邊出現認證需要的參數列單,其中Grant Type選擇Authorization Code(With PKCE),說明我們使用OpenID Connect。其它引數參考已經配置的Client 引數。
還需要說明的是,認證的地址為:[認證服務地址]/connect/authorize,在這個例子中這個地址為http://host.docker.internal:4010/connect/authorize。獲取Token的URL為[認證服務地址]/connect/token,在這個例子中地址為:http://host.docker.internal:4010/connect/token 。
引數填寫完成後,點選Get Access Token按鈕:
如果設定正確的話,會彈出認證頁面,輸入使用者名稱,密碼,認證完成後,PostMan關閉認證頁面,並返回Access Token:
點選Use Token,Token被自動填寫到訪問頁面:
這時再次按Send訪問Web Api,可以正確地獲取返回資料了: