ASP.NET-Problem mit Autorisierung und benutzerdefinierten Rollen über JWT-TokenC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 ASP.NET-Problem mit Autorisierung und benutzerdefinierten Rollen über JWT-Token

Post by Anonymous »

Ich arbeite an einem Projekt, bei dem ich den Zugriff auf bestimmte API-Endpunkte über eine Rolle einschränken muss. Ich stoße auf ein Problem, nachdem ich den Authorize-Header dem Endpunkt hinzugefügt habe, auf dem ich ihn testen wollte.

[img]https://i .sstatic.net/TSTTOzJj.png[/img]

Ich bin nicht sicher, wozu die Login?ReturnUrl dienen soll oder was sie anzeigt. Ich kann jedoch erkennen, dass das Cookie die Rollen (und die richtige) zum Senden der Anfrage zu enthalten scheint.
Ich habe versucht, die JWT- und CSRF-Tokens zu ändern, aber sie sind beide auf SameSiteMode.None setzen und auf „true“ sichern. Das JWT-Token ist aus Sicherheitsgründen HttpOnly.
AddVoertuig (Endpunkt, den ich verwenden möchte)

Code: Select all

        [HttpPost("AddVoertuig")]
[Authorize(Roles = "Particulier,Zakelijk,Wagenparkbeheerder")]
public async Task AddVoertuig([FromBody] Voertuig voertuig)
{
if (voertuig == null)
{
return BadRequest("Er is iets fout gegaan tijdens het toevoegen. Probeer het opnieuw!");
}

_context.Voertuigen.Add(voertuig);
await _context.SaveChangesAsync();
return CreatedAtAction(nameof(GetVoertuig), new { Id = voertuig.VoertuigID }, voertuig);
}
Von hier aus sende ich die Anfrage

Code: Select all

        try {
const resultaat = await fetchCsrf("http://localhost:5202/api/VoertuigBeheer/AddVoertuig", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
credentials: "include",
body: JSON.stringify(voertuigData)
});
if (resultaat.ok) {
alert("Voertuig toegevoegd!");
formulier.reset();
} else {
alert("Er is iets fout gegaan tijdens het toevoegen van het voertuig. Probeer het opnieuw!");
}
} catch (error) {
console.error("Fout: ", error);
}
Ich habe auch die richtige Konfiguration hinzugefügt, denke ich

Code: Select all

builder.Services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = builder.Configuration["Jwt:Issuer"],
ValidAudience = builder.Configuration["Jwt:Audience"],
IssuerSigningKey = new Microsoft.IdentityModel.Tokens.SymmetricSecurityKey(
System.Text.Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"])
),
};

options.Events = new JwtBearerEvents
{
OnMessageReceived = context =>
{
var token = context.Request.Cookies["jwtToken"];
if (!string.IsNullOrEmpty(token))
{
context.Token = token;
}
return Task.CompletedTask;
}
};
});
Dies soll das Cookie lesen und die Rollen daraus abrufen, damit der Benutzer ordnungsgemäß authentifiziert wird. Was habe ich verpasst?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post