JWT認証の実装例(ASP.NET Core)

まず、NuGetから以下のパッケージをインストールします:

Microsoft.AspNetCore.Authentication.JwtBearer

1. 認証サービスの登録とミドルウェアの設定

Startup.csConfigureServices メソッド内で JWT Bearer 認証を設定します:

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(options =>
        {
            options.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuer = true,
                ValidateAudience = true,
                ValidateLifetime = true,
                ValidateIssuerSigningKey = true,
                ValidIssuer = Configuration["Jwt:Issuer"],
                ValidAudience = Configuration["Jwt:Audience"],
                IssuerSigningKey = new SymmetricSecurityKey(
                    Encoding.UTF8.GetBytes(Configuration["Jwt:Secret"]))
            };
        });

次に、Configure メソッドで認証ミドルウェアを有効化します:

app.UseAuthentication();

2. 必要な名前空間の追加

using System.IdentityModel.Tokens.Jwt;
using Microsoft.IdentityModel.Tokens;
using System.Text;

3. トークン生成メソッドの実装

private string GenerateJwtToken(string id, string name)
{
    var claims = new[]
    {
        new Claim(JwtRegisteredClaimNames.Sub, id),
        new Claim(JwtRegisteredClaimNames.Name, name)
    };

    var key = new SymmetricSecurityKey(
        Encoding.UTF8.GetBytes(_configuration["Jwt:Secret"]));
    var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

    var token = new JwtSecurityToken(
        issuer: _configuration["Jwt:Issuer"],
        audience: _configuration["Jwt:Audience"],
        claims: claims,
        expires: DateTime.UtcNow.AddMinutes(120),
        signingCredentials: creds);

    return new JwtSecurityTokenHandler().WriteToken(token);
}

4. コントローラでのログイン処理

[HttpPost]
public IActionResult Login(LoginRequest request)
{
    var user = ValidateCredentials(request);
    if (user == null)
        return Unauthorized();

    var jwt = GenerateJwtToken(user.Id, user.Name);
    return Ok(new { token = jwt });
}

private User ValidateCredentials(LoginRequest req)
{
    // 実際にはデータベースや認証サービスと連携
    if (req.Username == "test" && req.Password == "password")
        return new User { Id = "123456789", Name = "test" };
    return null;
}

public class LoginRequest
{
    public string Username { get; set; }
    public string Password { get; set; }
}

public class User
{
    public string Id { get; set; }
    public string Name { get; set; }
}

5. 動作確認

Postman などで /login エンドポイントに POST リクエストを送信し、JWT トークンが正常に発行されることを確認できます。

タグ: JWT ASP.NET Core authentication

5月21日 01:56 投稿