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?
c#
asp.net-mvc
.net-core
Chris Stillwell
quelle
quelle
User.Identity.IsAuthenticated
scheint falsch zu sein. Wenn ja, hat dies möglicherweise mit dem AuthenticationScheme zu tun.UseEndpoints
ans Ende derConfigure
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.Antworten:
Es scheint, dass der Benutzer überhaupt nicht authentifiziert ist.
Mit asp.net Core 3.0 wurde das Routing auf Endpoint-Routing geändert. Sie können sich durch Einstellen abmelden
EnableEndpointRouting = false
.Dies scheint hier jedoch nicht der Fall zu sein. Das bedeutet, dass Sie bestimmte Dienste einbeziehen müssen, wenn Sie sie verwenden, z. B. Authentifizierung und Autorisierung:
Und das Wichtigste in dieser Reihenfolge . Wie hier dokumentiert: Migrieren Sie Startup.Configure .
quelle