使用PostMan Canary測試受Identity Server 4保護的Web Api

尋找無名的特質發表於2022-02-27

《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,可以正確地獲取返回資料了:

相關文章