.NET 6 swagger授權
目的
在swagger內使用jwt token測試API
建立新專案
選擇ASP.NET Core Web API專案範本,並執行下一步 
設定新的專案
命名你的專案名稱,並選擇專案要存放的位置。 
其他資訊
選擇.net6版本,支援OpenAPI支援一定要勾選,此選項.net5以後才會有,.net core 3.1並沒有此選項,需要從NuGet安裝,並點建立 
專案基本設定
右邊紅框處專案檔點兩下,會開啟專案的xml檔案,額外加入兩行xml資料,目的是要透過編譯器產生文件檔案
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<NoWarn>$(NoWarn);1591</NoWarn>加入前

加入後

編輯Program.cs檔案
修改program檔案內容,調整AddSwaggerGen的內容,目的是為了可以讀取我們所寫的註解
加入前

加入後

NuGet加入套件
透過NuGet安裝
JWT
Microsoft.AspNetCore.Authentication.JwtBearer
Microsoft.IdentityModel.Tokens
System.IdentityModel.Tokens.Jwt

新增Helpers資料夾並在裡面新增JwtHelpers.cs類別檔案
jwt範例使用保哥範例來做修改,目的只是為了取得jwt token
因篇幅過長,只擷取JwtHelpers.cs部分內容,記得要using下列命名空間

新增Filters資料夾並在裡面新增AuthorizeCheckOperationFilter.cs類別檔案
因為在使用swagger做認證測試時,會遇到一個很惱人的問題,就是當我的某些api並不需要做認證,卻還是會在畫面上顯示鎖頭
第一支並沒有attribute,無須認證
第二支為AllowAnonymous,無須認證
第三支為Authorize,需要認證

編輯WeatherForecastController檔案
注入JwtHelper 
第一支為預設沒有attribute的方法
第二支為登入方法,attribute是AllowAnonymous,任何人都可以使用
第三支為登入後才可以取得的資料,attribute是Authorize(Roles = “admin”),role需要是admin才可以使用

再次編輯Program.cs檔案
分兩個區塊說明
JWT設定

Swagger-UI調整
Type使用
SecuritySchemeType.Http,不用打Bearer
Type使用
SecuritySchemeType.ApiKey,需要打Bearer與空白以及文字描述會包含Name、In、Description
在下方別忘了使用認證的中介層
執行結果
在登入的api輸入帳號密碼 
會回傳一組jwt token 
點擊認證按鈕,將token輸入 

使用有鎖頭的AP I
最後可以正確取得回傳值就是成功了 
如果不輸入token直接使用有鎖頭的API,就會跳出401錯誤 
參考
範例檔
Last updated