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; }
}