ASP .NET Core Web APIのSwagger UIでトークン認証を使えるようにする
Authorize属性が付いたWeb APIのデバッグをしたい。
設定編集
Swagger UIを有効にする処理部分にAuthorizeボタンを表示する設定コードを追加する。 .NET 8.0だとProgram.csあたり。
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(options =>
{
options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
{
Description = "Authorizeボタンで表示される入力ダイアログには以下の形式でトークンを貼り付けろ \"Bearer {token}\"",
Name = "Authorization",
In = ParameterLocation.Header,
Type = SecuritySchemeType.ApiKey,
Scheme = "Bearer"
});
options.AddSecurityRequirement(new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme
{
Reference = new OpenApiReference
{
Type = ReferenceType.SecurityScheme,
Id = "Bearer"
}
},
new string[] {}
}
});
});
使い方編集
上記のコードを入れるとSwagger UIにAuthorizeボタン(鍵マーク)が表示されるようになる。 Authorizeダイアログには以下の形式でトークンを貼り付けてログインする。 先頭の「Bearer 」が重要でトークンだけ貼り付けても動かないぞ。
Bearer {token}
動作確認編集
Swagger UIでAuthorize属性が付いたWeb APIを呼び出してみる。 200が返ってくれば正常。
[ApiController]
[Route("api/[controller]")]
public class ExampleController : ControllerBase
{
[HttpGet, Route("hello")]
[Authorize] //トークン認証が必要
public IActionResult Hello()
{
var userId = User.FindFirst(ClaimTypes.Name)?.Value;
return Ok($"Hello,{userId}");
}
}
おわり。