Политика пользователя работает, но [Authorize (roles = user)] неC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Политика пользователя работает, но [Authorize (roles = user)] не

Сообщение Anonymous »

У меня есть пользователи посевных пользователей в свою систему с ролями пользователя и Admin , но когда я использую [Authorize (roles = "user")] или [Authorize (roles = "admin")] , я получаю HTTP 404 не найденную ошибку, вместо 200 OK или даже 403 FARED/401 UNAuthorified, если Role не является ошибкой, не будет jwttize Awartize. /> Вот мой код для добавления аутентификации и авторизации: < /p>

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

var jwtSettings = builder.Configuration.GetSection("Jwt");

builder.Services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = jwtSettings["Issuer"],
ValidAudience = jwtSettings["Audience"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSettings["Key"])),
RoleClaimType = ClaimTypes.Role

};
});

builder.Services.AddAuthorization(options =>
{
options.DefaultPolicy = new AuthorizationPolicyBuilder().AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme).RequireAuthenticatedUser().Build();
options.AddPolicy("UserPolicy", policy => policy.AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme).RequireAuthenticatedUser().RequireRole("User"));
options.AddPolicy("AdminPolicy", policy => policy.AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme).RequireAuthenticatedUser().RequireRole("Admin"));
});
< /code>
Код для посева пользователей и ролей (другие пользователи были добавлены с помощью контроллера входа в систему): < /p>
async Task SeedAsync()
{
var userManager = services.GetRequiredService();
var roleManager = services.GetRequiredService();

try
{
string[] rolenames = { "Admin", "User", "Manager" };

foreach (var rolename in rolenames)
{
var result = await roleManager.FindByNameAsync(rolename);

if (result == null)
{
await roleManager.CreateAsync(new IdentityRole(rolename));
}
}

var user = new User
{
FullName = "Mohammed",
Email = "[email protected]",
UserName = "Mohammed"
};

var results = await userManager.FindByEmailAsync(user.Email);

if (results == null)
{
await userManager.CreateAsync(user, "Password123!");
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}

await SeedAsync();
< /code>
Вот пример метода контроллера, который я протестирован на: < /p>
// GET: api/category
[HttpGet]
[Authorize(Roles ="User")]
public async Task GetAll()
{
var categories = await _categoryService.GetAllAsync();
return Ok(categories);
}

// GET: api/category/{id}
[HttpGet("{id}")]
[Authorize("AdminPolicy")]
public async Task GetById(int id)
{
var category = await _categoryService.GetByIdAsync(id);

if (category == null)
return NotFound();

return Ok(category);
}
Вторая конечная точка работает, и я получаю 200 OK или 403 запрещен или 401, но для первой конечной точки все, что я получаю, это HTTP 404 notFound () (он работает нормально, если я использую политику вместо этого). Придется создавать отдельные политики, в которых я бы хотел, чтобы это было легче сделать с [Authorize (roles = "user, admin")] . Он был протестирован с почтальником.

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

[Authorize(AuthenticationSchemes="Bearer",Roles="Admin)]
в моей конечной точке.
Но было бы более подходящим, если бы мне не нужно было указать схему аутентификации и просто мог выбрать роли в качестве параметра.

Подробнее здесь: https://stackoverflow.com/questions/797 ... r-does-not
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Политика пользователя работает, но [Authorize (roles = user)] не
    Anonymous » » в форуме C#
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous
  • Политика пользователя работает, но [Authorize (roles = user)] не
    Anonymous » » в форуме C#
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous
  • Политика пользователя работает, но [Authorize (roles = user)] не
    Anonymous » » в форуме C#
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • ASP.NET CORE WEB API: Политика пользователя работает, но [Auturize (roles = user)]
    Anonymous » » в форуме C#
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • ASP.NET CORE WEB API: Политика пользователя работает, но [Auturize (roles = user)]
    Anonymous » » в форуме C#
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous

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