Ich arbeite daran, meine .NET Core 2.2 MVC-Anwendung auf 3.0 zu aktualisieren. In dieser Anwendung authentifiziere ich mich bei einem Controller mithilfe eines JWT-Tokens. Das Token enthält mehrere Ansprüche, aber wenn ich versuche, über User.Claims
die resultierende Liste darauf zuzugreifen, ist es immer leer.
In meinem habe Startup.cs
ich das Authentifizierungssetup wie folgt:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// Code removed for clarity //
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = JwtManager.Issuer,
ValidAudience = "MyAudience",
IssuerSigningKey = "MySigningKey"
};
});
}
}
In Core 2.2 konnte ich mit einem Code wie dem folgenden auf meine Ansprüche zugreifen:
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public class MyController : Controller
{
[HttpGet("MyController/Action")]
public ActionResult<Aggregate[]> GetAction()
{
var username = User.FindFirstValue("MyUsernameClaim");
if (username == null)
{
return Forbid();
}
// Do Stuff //
}
}
Wenn ich jedoch denselben Code auf Core 3.0 migriere, authentifiziere ich mich ordnungsgemäß, erhalte jedoch keine Ansprüche für das User
Objekt.
Habe ich einen Schritt bei der Konvertierung in 3.0 verpasst? Wird User
nicht mehr automatisch mit Informationen gefüllt oder so?
UseEndpoints
ans Ende der Configure
Methode gegangen und das hat die Dinge behoben. Heilige Kuh, ich kann nicht glauben, dass so etwas Einfaches mich peinlich viel Zeit gekostet hat. Wenn du das als Antwort posten willst, werde ich es akzeptieren.
User.Identity.IsAuthenticated
scheint falsch zu sein. Wenn ja, hat dies möglicherweise mit dem AuthenticationScheme zu tun.