Здравствуйте, не могу разобраться с этой проблемой... Проблема в том, что я всегда получаю ошибку 401. Я уже создаю базу данных, таблицы и пользователя на своем сервере Sql. Я пробовал использовать пользовательский интерфейс Postman и Swagger... Спасибо за помощь.
Program.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; }
}
}
Я хочу авторизовать пользователя и выполнить методы demo или getusers.
[b]Здравствуйте[/b], не могу разобраться с этой проблемой... Проблема в том, что я всегда получаю ошибку 401. Я уже создаю базу данных, таблицы и пользователя на своем сервере Sql. Я пробовал использовать пользовательский интерфейс Postman и Swagger... Спасибо за помощь. Program.cs [code]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();
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[] {} } }); });
[/code] AuthController.cs [code]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;
[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();
[/code] UsersCont.cs [code]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); } } }
[/code] и AppDbContext.cs [code]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; } } }
[/code] Я хочу авторизовать пользователя и выполнить методы demo или getusers.