.NET 6 swagger授權

目的

在swagger內使用jwt token測試API

建立新專案

選擇ASP.NET Core Web API專案範本,並執行下一步 步驟1-1

設定新的專案

命名你的專案名稱,並選擇專案要存放的位置。 步驟2-1

其他資訊

選擇.net6版本,支援OpenAPI支援一定要勾選,此選項.net5以後才會有,.net core 3.1並沒有此選項,需要從NuGet安裝,並點建立 步驟3-1

專案基本設定

右邊紅框處專案檔點兩下,會開啟專案的xml檔案,額外加入兩行xml資料,目的是要透過編譯器產生文件檔案

<GenerateDocumentationFile>true</GenerateDocumentationFile>
<NoWarn>$(NoWarn);1591</NoWarn>
  • 加入前 步驟4-1

  • 加入後 步驟4-2

編輯Program.cs檔案

修改program檔案內容,調整AddSwaggerGen的內容,目的是為了可以讀取我們所寫的註解

  • 加入前 步驟5-1

  • 加入後 步驟5-2

NuGet加入套件

透過NuGet安裝

  • JWT

  • Microsoft.AspNetCore.Authentication.JwtBearer

  • Microsoft.IdentityModel.Tokens

  • System.IdentityModel.Tokens.Jwt

範例6-1

新增Helpers資料夾並在裡面新增JwtHelpers.cs類別檔案

jwt範例使用保哥範例來做修改,目的只是為了取得jwt token

因篇幅過長,只擷取JwtHelpers.cs部分內容,記得要using下列命名空間

範例7-1

新增Filters資料夾並在裡面新增AuthorizeCheckOperationFilter.cs類別檔案

因為在使用swagger做認證測試時,會遇到一個很惱人的問題,就是當我的某些api並不需要做認證,卻還是會在畫面上顯示鎖頭

  • 第一支並沒有attribute,無須認證

  • 第二支為AllowAnonymous,無須認證

  • 第三支為Authorize,需要認證

範例8-1

編輯WeatherForecastController檔案

注入JwtHelper 範例9-1

  • 第一支為預設沒有attribute的方法

  • 第二支為登入方法,attribute是AllowAnonymous,任何人都可以使用

  • 第三支為登入後才可以取得的資料,attribute是Authorize(Roles = “admin”),role需要是admin才可以使用

範例9-2

再次編輯Program.cs檔案

分兩個區塊說明

  1. JWT設定

範例10-1
  1. Swagger-UI調整

  • Type使用SecuritySchemeType.Http,不用打Bearer範例10-2

  • Type使用SecuritySchemeType.ApiKey,需要打Bearer與空白以及文字描述會包含Name、In、Description範例10-3範例10-4在下方別忘了使用認證的中介層範例10-5

執行結果

在登入的api輸入帳號密碼 範例11-1

會回傳一組jwt token 範例11-2

點擊認證按鈕,將token輸入 範例11-3

範例11-4

使用有鎖頭的AP I範例11-5

最後可以正確取得回傳值就是成功了 範例11-6

如果不輸入token直接使用有鎖頭的API,就會跳出401錯誤 範例11-7

參考

保哥 伊果的沒人看筆記本 實作Filter JWT規範

範例檔

GitHub

Last updated