1. appsetting.json file

"ConnectionStrings": {

"DefaultConnection":"Server=ZIAUL; Database=AkijBashir; Trusted_Connection=True;MultipleActiveResultSets=true"

},

"AllowedHosts": "*",

"JWT": {

  "ValidAudience": "http://localhost:4200",

  "ValidIssuer": "http://localhost:61955",

  "Secret": "ByYM000OLlMQG6VVVp1OH7Xzyr7gHuw1qvUC5dcGt3SNM"

}

2. program.cs file

builder.Services.AddAuthentication(cfg => {

    cfg.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;

    cfg.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;

    cfg.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;

}).AddJwtBearer(x => {

    x.RequireHttpsMetadata = false;

    x.SaveToken = false;

    x.TokenValidationParameters = new TokenValidationParameters

    {

        ValidateIssuerSigningKey = true,

        IssuerSigningKey = new SymmetricSecurityKey(

            Encoding.UTF8

            .GetBytes(builder.Configuration["Jwt:Secret"])

        ),

        ValidateIssuer = false,

        ValidateAudience = false,

        ClockSkew = TimeSpan.Zero

    };

});

app.UseCors(option =>

{

    option.AllowAnyOrigin();

    option.AllowAnyMethod();

    option.AllowAnyHeader();

});

3. controller

private readonly DapperContext _dapperContext;

private readonly IConfiguration _configuration;

public AccountService(DapperContext dapperContext, IConfiguration configuration)

{

    _dapperContext = dapperContext;

    _configuration = configuration;

}


public async Task<object> UserLogin(UserLogin request)

{

    if (string.IsNullOrEmpty(request.ContactNo))

    {

        return Result.Failure(new List<string> { "Contact No is required" });

    }

    if (string.IsNullOrEmpty(request.Password))

    {

        return Result.Failure(new List<string> { "Password No is required" });

    }

    using (var context = _dapperContext.CreateConnection())

    {

        string query = "SELECT * FROM Users where Mobile = '" + request.ContactNo + "' ";

        var userData = await context.QueryFirstOrDefaultAsync<Users>(query);


        if (userData != null)

        {

            var hasPass = Helper.HashPassword(request.Password, userData.PasswordKey);

            if (userData.PasswordValue == hasPass)

            {

                var user = new UsersViewModel

                {

                    Id = userData.Id,

                    Email = userData.Email,

                    Name = userData.Name,

                    ClientId = userData.ClientId,

                };

                var token = GenerateJWTToken(user);


                return new

                {

                    succeed = true,

                    token = token,

                    name = userData.Name

                };

            }

            else

            {

                return Result.Failure(new List<string> { "UserId and Password Dose Not Match" });

            }

        }

        else

        {

            return Result.Failure(new List<string> { "User Not Found" });

        }

    }

}

public string GenerateJWTToken(UsersViewModel user)

{

    var claims = new List<Claim>

    {

        new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),

        new Claim(ClaimTypes.Name, user.Name),

        new Claim(ClaimTypes.Email, user.ClientId.ToString()),

    };


    var jwtToken = new JwtSecurityToken(

        claims: claims,

        notBefore: DateTime.UtcNow,

        expires: DateTime.UtcNow.AddHours(3),

        signingCredentials: new SigningCredentials

        ( 

            new SymmetricSecurityKey( Encoding.UTF8.GetBytes(_configuration["Jwt:Secret"])),

            SecurityAlgorithms.HmacSha256Signature)

        );

    return new JwtSecurityTokenHandler().WriteToken(jwtToken);

}