[asp.net core] 在預設的 swagger 頁面上加上 JWT 驗證的按鈕

[asp.net core] 在預設的 swagger 頁面上加上 JWT 驗證的按鈕

[asp.net core] Add JWT support on default swagger page


Cover Image for [asp.net core] 在預設的 swagger 頁面上加上 JWT 驗證的按鈕

關於在 asp.net core 使用 JWT 驗證可以參考 Will 保哥的這篇教學,寫的詳盡又完整、code 也很簡潔易懂,這裡我就不多說了。

問題

預設 Swagger 頁面沒有可以輸入 token 的地方,導致就算拿的到 token 也沒辦法用的情況。

解決方法

在專案根目錄的 Program.cs (或舊版的 Startup.cs) 找到生成 swagger 文件的地方

builder.Services.AddSwaggerGen();

幫它手動改生成選項,改成:

builder.Services.AddSwaggerGen(c =>
{
// Authorize JWT in Swagger
OpenApiSecurityScheme securityDefinition = new OpenApiSecurityScheme()
{
Name = "Bearer",
BearerFormat = "JWT",
Scheme = "bearer",
Description = "把你拿到的 token 放這裡!",
In = ParameterLocation.Header,
Type = SecuritySchemeType.Http,
};
c.AddSecurityDefinition("jwt_auth", securityDefinition);

// Make sure swagger UI requires a Bearer token specified
OpenApiSecurityScheme securityScheme = new OpenApiSecurityScheme()
{
Reference = new OpenApiReference()
{
Id = "jwt_auth",
Type = ReferenceType.SecurityScheme
}
};
OpenApiSecurityRequirement securityRequirements = new OpenApiSecurityRequirement() { { securityScheme, new string[] { } }, };
c.AddSecurityRequirement(securityRequirements);
});

這樣就會在原網頁上出現 Authorize 的按鈕

拿到 token 後直接放進去 (不需要加 Bearer),按下確定就能正常使用需要 Authorize 的 API 了