ASP.NET Core - 간단한 JWT 인증 작성

이것은 시작하기 위한 JWT 인증의 간단한 구현일 뿐입니다.
  • 패키지 추가Microsoft.AspNetCore.Authentication.JwtBearer

  • 비밀 키가 필요합니다. user-secrets를 사용하여 추가하십시오.

    dotnet user-secrets init
    dotnet user-secrets set "Authentication:JwtSecret" "thisismysecret"
    

    경고! 사용자 암호는 프로덕션에서 사용하기 위한 것이 아닙니다.
  • Program.cs 또는 Startup.cs에서:

    using Microsoft.AspNetCore.Authorization;
    using Microsoft.AspNetCore.Mvc.Authorization;
    using Microsoft.IdentityModel.Tokens;
    

    서비스를 추가합니다.

    builder.Services
        .AddAuthentication()
        .AddJwtBearer("JwtScheme", options => {
            options.TokenValidationParameters = new TokenValidationParameters 
            {
                ValidIssuer = "https://localhost:<port>",
                ValidAudience = "https://localhost:<port>",
                ValidateIssuer = true,
                ValidateAudience = true,
                ValidateLifetime = true,
                ValidateIssuerSigningKey = true,                
                IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["Authentication:JwtSecret"])),
            };
    }) 
    

    사용자가 JWTScheme로 인증되어야 한다고 MVC에 알립니다.

    builder.Services.AddControllers(options => {
        options.Filters.Add(new AuthorizeFilter
            (new AuthorizationPolicyBuilder()
                .RequireAuthenticatedUser()
                .AddAuthenticationSchemes("JwtScheme")
                .Build()));
    })
    

    HTTP 요청 파이프라인에서 컨트롤러를 매핑하기 전에 다음을 추가합니다.

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


  • 인증 컨트롤러에서:

    using Microsoft.IdentityModel.Tokens;
    using System.IdentityModel.Tokens.Jwt;
    using System.Security.Claims;
    .
    .
    //inject `IConfiguration` to `_configuration` in the constructor.
    

    로그인 방법에서 [AllowAnonymous] 속성을 추가합니다. 그 다음에:

    //validate credentials and get user details here
    var key = Encoding.ASCII.GetBytes(_configuration["Authentication:JwtSecret"]);
    var claims = new List<Claim>
        {
            new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
            new Claim(ClaimTypes.Name, user.Username)
        };
    var tokenDescriptor = new SecurityTokenDescriptor
        {
            Subject = new ClaimsIdentity(claims),
            Issuer = "https://localhost:<port>",
            Audience = "https://localhost:<port>",
            Expires = DateTime.UtcNow.AddDays(7),
            SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature),
    
        };
    
    var tokenHandler = new JwtSecurityTokenHandler();
    var token = tokenHandler.CreateToken(tokenDescriptor);
    return tokenHandler.WriteToken(token);
    

    로그인 방법은 생성된 토큰을 반환합니다.
  • 클라이언트의 HTTP 요청에서 값이 AuthorizeBearer <the token generated> 헤더를 추가합니다. Postman 또는 원하는 테스트 프로그램을 통해 테스트할 수 있습니다.

  • 자원
    Infoworld Article - JWT
    Microsoft Docs - User Secrets

    좋은 웹페이지 즐겨찾기