Wednesday, March 18, 2026

.net core JWT authentication.

 


1.  Use windows authentication

 

 

"JwtConfig": {

  "Key": "text_jwt_secret_key_apx_team_support_@$#",

  "Issuer": "http://localhost:19748/",

  "Audience": "http://localhost:19748/",

  "ExpirationMonth": 60

}

======*=====PRGRAM.CS =======*===========*======

using proj_CORE_API;

using Microsoft.AspNetCore.Authentication.JwtBearer;

using Microsoft.Extensions.DependencyInjection.Extensions;

using Microsoft.IdentityModel.Tokens;

using Microsoft.OpenApi.Models;

using System.Text;

 

var builder = WebApplication.CreateBuilder(args);

 

// Add services to the container.

builder.Services.AddCors(options =>

{

    options.AddPolicy("p1",

                          policy =>

                          {

                              policy.WithOrigins("http://localhost:8080", "https://localhost:8080",

                                        "http://localhost:8000", "https://localhost:8000")

                                                  .AllowAnyHeader()

                                                  .AllowAnyMethod()

                  .AllowCredentials();

                          });

});

builder.Services.AddAuthorization();

builder.Services.AddAuthentication(options => {

    options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;

    options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;

    options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;

}).AddJwtBearer(options =>

    {

        options.RequireHttpsMetadata = false;

        options.TokenValidationParameters = new TokenValidationParameters

        {

            ValidateIssuer = true,

            ValidIssuer = builder.Configuration["JwtConfig:Issuer"],

            ValidateAudience = true,

            ValidAudience = builder.Configuration["JwtConfig:Audience"],

            ValidateIssuerSigningKey = true,

            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["JwtConfig:Key"])),

 

            ValidateLifetime = true

        };

    });

builder.Services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();

 

 

builder.Services.AddControllers();

// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle

builder.Services.AddEndpointsApiExplorer();

builder.Services.AddSwaggerGen(options =>

{

    var jwtSecurityScheme = new OpenApiSecurityScheme

    {

        BearerFormat = "JWT",

        Name = "Authorization",

        In = ParameterLocation.Header,

        Type = SecuritySchemeType.Http,

        Scheme = JwtBearerDefaults.AuthenticationScheme,

        Description = "Enter JWT Bearer token only",

        Reference = new OpenApiReference

        {

            Id = JwtBearerDefaults.AuthenticationScheme,

            Type = ReferenceType.SecurityScheme

        }

    };

    options.AddSecurityDefinition("Bearer", jwtSecurityScheme);

    options.AddSecurityRequirement(new OpenApiSecurityRequirement

    {

        { jwtSecurityScheme, Array.Empty<string>() }

    });

});

var app = builder.Build();

// Configure the HTTP request pipeline.

if (app.Environment.IsDevelopment()) //|| app.Environment.IsProduction())

{

   

    app.UseSwagger();

    app.UseSwaggerUI();

}

 

app.UseRouting();

app.UseCors("p1");

//app.UseHttpsRedirection();

 

 

app.UseAuthentication();

app.UseAuthorization();

 

app.MapControllers();

 

app.Run();

======*====CONTROLLER========*===========*======

 

    [Route("api/[controller]")]

    [ApiController]

    public class IGAController : ControllerBase

    {

        private readonly IConfiguration _conf; private readonly IHttpContextAccessor _iHttpContextAccessor;

 

        public IGAController(IConfiguration configuration, IHttpContextAccessor httpContext)

        {

            _conf = configuration;

            _iHttpContextAccessor = httpContext;

        }

 

        [HttpGet]

        [Route("users")]

        [Authorize]

        public ActionResult<List<IgaResponse>> GetUsers(string pageNumber, string pageSize)

        {

            try

            {

                var currUser = _iHttpContextAccessor.HttpContext.User;

                

                string luser = "";

                if (!string.IsNullOrEmpty(HttpContext.Request.Headers["Authorization"]))

                    luser = HttpContext.Request.Headers["Authorization"].ToString();

               

                List<IgaResponse> ds = new List<IgaResponse>();

                        (ds, DataSet ods) = new IGABAL().GetUserDetails(pageNumber, pageSize, luser);

 

                        return Ok(JsonConvert.SerializeObject(new { data = ds, pagination = ods.Tables[1] }, Formatting.Indented));                   

            }

            catch (Exception ex)

            {

                Helper.WriteToLog("CORE_API", "IGAController->GetUsers()", ex);

                return BadRequest(ex.Message);

            }

        }

        [HttpGet]

        [Route("loginWindows")]

        [AllowAnonymous]

        public IActionResult LoginWindows()

        {

            string username = Request.Method                ;

           

                // Generate the JWT

                var token = new IGABAL(_conf, _iHttpContextAccessor).GenerateJSONWebToken(username);

                return Ok(new { token = token });

        } 

======*====TOKEN GENERATION========*===========*======

 

  public string GenerateJSONWebToken(string username)

  {

      var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_conf["JwtConfig:Key"])); // Get a secret key from appsettings.json

      var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);

      var time = _conf["JwtConfig:ExpirationMonth"];

      // Add claims based on the Windows user's identity

      var claims = new[] {

              new Claim(JwtRegisteredClaimNames.Name, username),

              new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),

              new Claim(JwtRegisteredClaimNames.NameId, username),

              new Claim("loginid", username)

              // Add other relevant claims like roles, email, etc.

          };

      var token = new JwtSecurityToken(

          _conf["JwtConfig:Issuer"],

          _conf["JwtConfig:Audience"],

          claims,

          expires: DateTime.Now.AddMonths(Convert.ToInt32(time)), // Set token expiration

          signingCredentials: credentials);

 

      return new JwtSecurityTokenHandler().WriteToken(token);

  }

public class Token

{

    public string StrToken { get; set; }

}