dotnet6 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的內容,目的是為了可以讀取我們所寫的註解 builder.Services.AddSwaggerGen(options => { // using System.Reflection; var xmlFilename = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, xmlFilename)); }); 加入前 加入後 NuGet加入套件 透過NuGet安裝 JWT Microsoft.AspNetCore.Authentication.JwtBearer Microsoft.IdentityModel.Tokens System.IdentityModel.Tokens.Jwt 新增Helpers資料夾並在裡面新增JwtHelpers.cs類別檔案 jwt範例使用保哥範例來做修改,目的只是為了取得jwt token public class JwtHelper { private readonly JwtSettingsOptions _settings; public JwtHelper(IOptionsMonitor<JwtSettingsOptions> settings) { //注入appsetting的json _settings = settings.CurrentValue; } public string GenerateToken(string userName, int expireMinutes = 120) { //發行人 var issuer = _settings.Issuer; //加密的key,拿來比對jwt-token沒有 var signKey = _settings.SignKey; 建立JWT-Token var token = JwtBuilder.Create() //所採用的雜湊演算法 .WithAlgorithm(new HMACSHA256Algorithm()) // symmetric //加密key .WithSecret(signKey) //角色 .AddClaim("roles", "admin") //JWT ID .AddClaim("jti", Guid.NewGuid().ToString()) //發行人 .AddClaim("iss", issuer) //使用對象名稱 .AddClaim("sub", userName) // User.Identity.Name //過期時間 .AddClaim("exp", DateTimeOffset.UtcNow.AddMinutes(expireMinutes).ToUnixTimeSeconds()) //此時間以前是不可以使用 .AddClaim("nbf", DateTimeOffset.UtcNow.ToUnixTimeSeconds()) //發行時間 .AddClaim("iat", DateTimeOffset.UtcNow.ToUnixTimeSeconds()) //使用者全名 .AddClaim(ClaimTypes.Name, userName) //進行編碼 .Encode(); return token; } } //將appsetting轉為強行別所使用 public class JwtSettingsOptions { public string Issuer { get; set; } = ""; public string SignKey { get; set; } = ""; } 因篇幅過長,只擷取JwtHelpers.cs部分內容,記得要using下列命名空間 ...