ClaimTypes.Role
and only using the input values (client_id
, client_secret
, and grant_type
), follow these steps:Program.cs
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;
using System.Text;
var builder = WebApplication.CreateBuilder(args);
var key = "your_super_secret_key"; // Use a secure key in production
builder.Services.AddControllers();
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(key)),
ValidateIssuer = false,
ValidateAudience = false
};
});
builder.Services.AddAuthorization();
var app = builder.Build();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.Run();
Define the input model in a file, e.g.,
Models/TokenRequest.cs
:public class TokenRequest
{
public string ClientId { get; set; }
public string ClientSecret { get; set; }
public string GrantType { get; set; }
}
Create a controller
AuthController.cs
inside Controllers
folder:using Microsoft.AspNetCore.Mvc;
using Microsoft.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;
using System.Text;
[Route("api/auth")]
[ApiController]
public class AuthController : ControllerBase
{
private readonly string _key = "your_super_secret_key"; // Use a secure key in production
[HttpPost("token")]
public IActionResult GenerateToken([FromBody] TokenRequest request)
{
// Validate client credentials (You can replace this with database validation)
if (request.ClientId != "my-client-id" || request.ClientSecret != "my-secret" || request.GrantType != "client_credentials")
{
return Unauthorized(new { message = "Invalid client credentials" });
}
// Generate JWT Token
var tokenHandler = new JwtSecurityTokenHandler();
var keyBytes = Encoding.UTF8.GetBytes(_key);
var tokenDescriptor = new SecurityTokenDescriptor
{
Expires = DateTime.UtcNow.AddHours(1), // Token expires in 1 hour
SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(keyBytes), SecurityAlgorithms.HmacSha256Signature)
};
var token = tokenHandler.CreateToken(tokenDescriptor);
var jwt = tokenHandler.WriteToken(token);
return Ok(new { access_token = jwt, token_type = "Bearer", expires_in = 3600 });
}
}
No comments:
Post a Comment