Jwt Bearer error="invalid_token" и больше не описываетC#

Место общения программистов C#
Ответить
Anonymous
 Jwt Bearer error="invalid_token" и больше не описывает

Сообщение Anonymous »

Здравствуйте, не могу разобраться с этой проблемой... Проблема в том, что я всегда получаю ошибку 401. Я уже создаю базу данных, таблицы и пользователя на своем сервере Sql. Я пробовал использовать пользовательский интерфейс Postman и Swagger... Спасибо за помощь.
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();

AuthController.cs

Код: Выделить всё

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!");
}
}
}

appsettings.json

Код: Выделить всё

{
"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": "*"
}

UsersCont.cs

Код: Выделить всё

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

Я хочу авторизовать пользователя и выполнить методы demo или getusers.

Подробнее здесь: https://stackoverflow.com/questions/787 ... sccription
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»