Implement JWT authentication and authorization for ASP.NET Core
I implement complete JWT authentication:
Use this skill when:
src/{ProjectName}.Infrastructure/Security/
├── Jwt/
│ ├── IJwtTokenGenerator.cs
│ ├── JwtTokenGenerator.cs
│ ├── IJwtTokenValidator.cs
│ └── JwtTokenValidator.cs
├── Password/
│ ├── IPasswordHasher.cs
│ └── PasswordHasher.cs
├── Claims/
│ └── ClaimConstants.cs
└── Extensions/
└── AuthenticationExtensions.cs
src/{ProjectName}.Application/Authentication/
├── Commands/
│ ├── RegisterCommand.cs
│ ├── RegisterCommandHandler.cs
│ ├── LoginCommand.cs
│ └── LoginCommandHandler.cs
├── DTOs/
│ ├── RegisterRequest.cs
│ ├── LoginRequest.cs
│ └── AuthResponse.cs
└── Services/
└── IAuthService.cs
public class JwtTokenGenerator : IJwtTokenGenerator
{
private readonly IOptions<JwtSettings> _jwtSettings;
public JwtTokenGenerator(IOptions<JwtSettings> jwtSettings)
{
_jwtSettings = jwtSettings;
}
public string GenerateToken(User user, IList<string> roles)
{
var key = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes(_jwtSettings.Value.Secret));
var credentials = new SigningCredentials(
key, SecurityAlgorithms.HmacSha256);
var claims = new List<Claim>
{
new Claim(JwtRegisteredClaimNames.Sub, user.Id.ToString()),
new Claim(JwtRegisteredClaimNames.Email, user.Email),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
new Claim(ClaimTypes.NameIdentifier, user.Id.ToString())
};
claims.AddRange(roles.Select(role =>
new Claim(ClaimTypes.Role, role)));
var token = new JwtSecurityToken(
issuer: _jwtSettings.Value.Issuer,
audience: _jwtSettings.Value.Audience,
claims: claims,
expires: DateTime.UtcNow.Add(_jwtSettings.Value.Expiry),
signingCredentials: credentials
);
return new JwtSecurityTokenHandler().WriteToken(token);
}
}
{
"JwtSettings": {
"Secret": "your-256-bit-secret-key-here",
"Issuer": "https://yourdomain.com",
"Audience": "https://yourdomain.com",
"Expiry": "01:00:00",
"RefreshTokenExpiry": "07:00:00:00"
}
}
builder.Services.AddAuthorization(options =>
{
options.AddPolicy("AdminOnly", policy =>
policy.RequireRole("Admin"));
options.AddPolicy("CanManageProducts", policy =>
policy.RequireClaim("Permission", "ManageProducts"));
});
Implement JWT authentication with:
- User registration
- User login
- Token generation
- Refresh token support
- Role-based authorization
- Password hashing (BCrypt)
I will generate complete JWT authentication implementation.
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer