0Pricing
C# Academy · レッスン

JWT Bearer認証の設定

パイプラインでトークン検証を組み込みます。

「JWT Bearer認証の設定」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全4レッスンが含まれています。

JWT Bearer ハンドラー

ASP.NET Core は、Microsoft.AspNetCore.Authentication.JwtBearer パッケージのJWT Bearer 認証ハンドラーを使って、受信した JWT を検証します。

このハンドラーは、Authorization: Bearer ... ヘッダーからトークンを読み取り、検証して、ClaimsPrincipal を構築します。

dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer

AddAuthentication

登録は AddAuthentication から始めます。既定のスキームを設定すると、スキームが指定されていない場合にどのハンドラーを使うかをフレームワークに知らせることができます。

JwtBearerDefaults.AuthenticationScheme は文字列 "Bearer" です。

builder.Services
    .AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer();

AddJwtBearer のオプション

AddJwtBearer のオーバーロードは、トークンの検証方法を構成するオプションデリゲートを受け取ります。

最も重要なプロパティは TokenValidationParameters です。

builder.Services
    .AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.TokenValidationParameters = new TokenValidationParameters
        {
            // configured below
        };
    });

発行者とオーディエンスの検証

ValidateIssuer と ValidateAudience を設定して、トークンが信頼する認証機関から発行され、対象 API 向けのものであることを確認します。

ValidIssuer と ValidAudience は、トークン内の iss および aud クレームと一致している必要があります。

var tvp = new TokenValidationParameters
{
    ValidateIssuer = true,
    ValidIssuer = builder.Configuration["Jwt:Issuer"],
    ValidateAudience = true,
    ValidAudience = builder.Configuration["Jwt:Audience"]
};

署名キーの検証

最もセキュリティ上重要なチェックは、IssuerSigningKey とともに ValidateIssuerSigningKey を使用することです。これにより、署名が自分のシークレットで生成されたことを確認します。

対称方式(HS256)の署名では、シークレットのバイト列から SymmetricSecurityKey を構築します。

var key = new SymmetricSecurityKey(
    Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]!));

tvp.ValidateIssuerSigningKey = true;
tvp.IssuerSigningKey = key;

有効期間の検証

ValidateLifetime = true を設定すると、exp および nbf クレームを確認して、期限切れのトークンを拒否します。

ClockSkew は、サーバー間の時刻の差に対する許容範囲を追加します。既定値は5分です。トークンの有効期間が短い場合は、より厳しく設定してください。

tvp.ValidateLifetime = true;
tvp.ClockSkew = TimeSpan.FromSeconds(30);

すべてを組み合わせる

実際の運用を想定した完全な構成では、すべての検証パラメーターを1か所にまとめます。

builder.Services
    .AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidIssuer = builder.Configuration["Jwt:Issuer"],
            ValidateAudience = true,
            ValidAudience = builder.Configuration["Jwt:Audience"],
            ValidateIssuerSigningKey = true,
            IssuerSigningKey = new SymmetricSecurityKey(
                Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]!)),
            ValidateLifetime = true,
            ClockSkew = TimeSpan.FromSeconds(30)
        };
    });

ミドルウェアの順序

構成するだけでは十分ではありません。パイプラインに認証ミドルウェアと認可ミドルウェアを追加する必要があり、その順序も重要です。

UseAuthentication は UseAuthorization より前に配置する必要があります。

var app = builder.Build();

app.UseAuthentication();
app.UseAuthorization();

app.MapControllers();
app.Run();

エンドポイントの保護

構成が完了したら、[Authorize](コントローラー)または .RequireAuthorization()(Minimal API)をエンドポイントに指定して、有効なトークンを必須にします。

app.MapGet("/me", (ClaimsPrincipal user) =>
        new { id = user.FindFirstValue(ClaimTypes.NameIdentifier) })
   .RequireAuthorization();

信頼できる認証プロバイダーの使用

トークンが外部の ID プロバイダー(例: Microsoft Entra ID、Auth0)から発行される場合は、静的なキーの代わりに Authority を設定します。

するとハンドラーは、プロバイダーのディスカバリードキュメントから署名キーを自動的にダウンロードします。

.AddJwtBearer(options =>
{
    options.Authority = "https://login.myidp.com/";
    options.Audience = "my-api";
    // Keys are fetched from the OpenID configuration endpoint
});

検証失敗の確認

JWT Bearer は、ログ記録やカスタムレスポンスに利用できるイベントを発生させます。たとえば、OnAuthenticationFailed や OnChallenge などです。

options.Events = new JwtBearerEvents
{
    OnAuthenticationFailed = ctx =>
    {
        logger.LogWarning(ctx.Exception, "JWT validation failed");
        return Task.CompletedTask;
    }
};

確認問題

パイプライン構成についての理解度を確認します。

まとめ

JWT Bearer 認証を構成しました。

  • AddAuthentication(...).AddJwtBearer(...) でハンドラーを登録します。
  • TokenValidationParameters で、発行者、オーディエンス、署名キー、有効期間のチェックを制御します。
  • UseAuthentication() は UseAuthorization() より前に配置する必要があります。
  • 外部 ID プロバイダーには Authority を使用します。

次は、自分でトークンを発行する方法です。

よくある質問

「JWT Bearer認証の設定」レッスンは無料ですか?

はい。「JWT Bearer認証の設定」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全4レッスンが含まれています。

「JWT Bearer認証の設定」で何を学びますか?

パイプラインでトークン検証を組み込みます。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

C# Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「JWT Bearer認証の設定」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このC# Academyレッスンでコードを書いて実行できますか?

はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. JWTの構造とクレーム
  2. JWT Bearer認証の設定
  3. トークンの発行
  4. リフレッシュトークンと有効期限
← C# Academyに戻る