ASP .NET Core Web APIのSwagger UIでトークン認証を使えるようにする

提供: MonoBook
ナビゲーションに移動 検索に移動

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}");
    }
}

おわり。