Program.cs
Код: Выделить всё
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.EntityFrameworkCore;
using Microsoft.IdentityModel.Tokens;
using Microsoft.OpenApi.Models;
using System.Text;
using WebApp3._0.Data;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddDbContext(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("UsersAppCon")));
var jwtSettings = builder.Configuration.GetSection("Jwt");
var key = Encoding.ASCII.GetBytes(jwtSettings["Key"]);
builder.Services.AddSwaggerGen(c => {
c.SwaggerDoc("v1", new OpenApiInfo
{
Title = "JWTToken_Auth_API",
Version = "v1"
});
c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme()
{
Name = "Authorization",
Type = SecuritySchemeType.ApiKey,
Scheme = "Bearer",
BearerFormat = "JWT",
In = ParameterLocation.Header,
Description = "JWT Authorization header using the Bearer scheme. \r\n\r\n Enter 'Bearer' [space] and then your token in the text input below.\r\n\r\nExample: \"Bearer 1safsfsdfdfd\"",
});
c.AddSecurityRequirement(new OpenApiSecurityRequirement {
{
new OpenApiSecurityScheme {
Reference = new OpenApiReference {
Type = ReferenceType.SecurityScheme,
Id = "Bearer"
}
},
new string[] {}
}
});
});
builder.Services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.IncludeErrorDetails = true;
options.RequireHttpsMetadata = false;
options.SaveToken = true;
options.TokenValidationParameters = new TokenValidationParameters()
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(key),
ValidateIssuer = true,
ValidateAudience = true,
ValidIssuer = jwtSettings["Issuer"],
ValidAudience = jwtSettings["Audience"]
};
});
builder.Services.AddControllers();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.MapControllers();
app.UseAuthentication();
app.UseAuthorization();
app.Run();
Код: Выделить всё
using Microsoft.AspNetCore.Mvc;
using Microsoft.IdentityModel.Tokens;
using System;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;
using WebApp3._0.Data;
using Microsoft.Extensions.Configuration;
using System.Linq;
using Microsoft.AspNetCore.Authorization;
namespace WebApp3._0.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class AuthController : ControllerBase
{
private readonly AppDbContext _context;
private readonly IConfiguration _configuration;
public AuthController(AppDbContext context, IConfiguration configuration)
{
_context = context;
_configuration = configuration;
}
[HttpPost("login")]
public IActionResult Login([FromBody] Users login)
{
var user = _context.User.SingleOrDefault(x => x.KULLANICI_ADI == login.KULLANICI_ADI && x.SIFRE == login.SIFRE);
if (user == null)
return Unauthorized();
var tokenHandler = new JwtSecurityTokenHandler();
var key = Encoding.ASCII.GetBytes(_configuration["Jwt:Key"]);
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(new Claim[]
{
new Claim(ClaimTypes.Name, user.KULLANICI_ADI)
}),
Expires = DateTime.UtcNow.AddHours(1),
Issuer = _configuration["Jwt:Issuer"],
Audience = _configuration["Jwt:Audience"],
SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
};
var token = tokenHandler.CreateToken(tokenDescriptor);
var tokenString = tokenHandler.WriteToken(token);
return Ok(new { Token = tokenString });
}
[Authorize]
[HttpGet("GetUsers")]
public IActionResult GetUsers()
{
var users = _context.User.Select(u => new
{
u.ID,
u.ADI,
u.SOYADI,
u.KULLANICI_ADI
}).ToList();
return Ok(users);
}
[Authorize]
[HttpGet("Demo")]
public IActionResult Demo()
{
return Ok("User Authenticated Successfully!");
}
}
}
Код: Выделить всё
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"ConnectionStrings": {
"UsersAppCon": "Data Source=CHICO-ROG;Initial Catalog=InternProject3o;Integrated Security=true;Encrypt=false;TrustServerCertificate=true"
},
"Jwt": {
"Key": "bbNmkHjzK8EtgMgEDvmvu5DwrA52myII",
"Audience": "https://localhost:7180",
"Issuer": "https://localhost:7180"
},
"AllowedHosts": "*"
}
Код: Выделить всё
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using WebApp3._0.Data;
namespace WebApp3._0.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class UsersCont : ControllerBase
{
private readonly AppDbContext _context;
public UsersCont(AppDbContext context)
{
_context = context;
}
[Authorize]
[HttpGet("GetUsers")]
public async Task GetUser()
{
var users = await _context.User
.Select(u => new { u.ID, u.ADI, u.SOYADI, u.KULLANICI_ADI })
.ToListAsync();
return Ok(users);
}
}
}
AppDbContext.cs
Код: Выделить всё
using Microsoft.EntityFrameworkCore;
using System.Collections.Generic;
namespace WebApp3._0.Data
{
public class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions options) : base(options) {}
public DbSet User { get; set; }
}
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... sccription