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

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

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


2022/07/26 10:08:41

關於在 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 了