Sicherheitstokenereignisse geben ein JSonWebToken wieder

Die JwtBearerEvents-, WsFederationEvents- und OpenIdConnectEvents-Ereignisse sind Authentifizierungsereignisse, die von den JwtBearer-, WsFederation- und OpenIdConnect-Authentifizierungshandlern ausgelöst werden. Beispielsweise wird das OnTokenValidated Ereignis ausgelöst, wenn ein Sicherheitstoken überprüft wird. Diese Ereignisse werden mit einem Kontext (z. B. TokenValidatedContext) ausgelöst, der eine TokenValidatedContext.SecurityToken-Eigenschaft vom abstrakten Typ SecurityToken offenlegt. Die standardmäßige reale Implementierung von TokenValidatedContext.SecurityToken geändert von System.IdentityModel.Tokens.Jwt.JwtSecurityToken zu JsonWebToken.

Eingeführt in Version

ASP.NET Core 8.0 Preview 7

Vorheriges Verhalten

Zuvor wurden die betroffenen SecurityToken-Eigenschaften von System.IdentityModel.Tokens.Jwt.JwtSecurityToken implementiert, der von SecurityToken abgeleitet ist. JwtSecurityToken ist die vorherige Generation der JSON Web Token (JWT)-Implementierung. Die JwtSecurityToken Tokens wurden von SecurityTokenValidators.

Darüber hinaus hat das JwtSecurityTokenHandler.DefaultInboundClaimTypeMap Feld die Standardmäßige Anspruchstypzuordnung für eingehende Ansprüche bereitgestellt.

Neues Verhalten

Ab Version ASP.NET Core 8.0 implementiert die Microsoft.IdentityModel.JsonWebTokens Klasse, die auch von SecurityToken abgeleitet ist, standardmäßig die SecurityToken-Eigenschaften. Microsoft.IdentityModel.JsonWebTokens Token werden von optimierten TokenHandler Handlern erstellt.

Darüber hinaus stellt das JsonWebTokenHandler.DefaultInboundClaimTypeMap Feld die Standardmäßige Anspruchstypzuordnung für eingehende Ansprüche bereit.

Art der einschneidenden Änderung

Diese Änderung ist eine Verhaltensänderung.

Grund für Änderung

Diese Änderung wurde vorgenommen, da JsonWebToken (und damit verbunden JsonWebTokenHandler) die folgenden Vorteile bringen:

  • 30% Leistungsverbesserung.
  • Verbesserte Zuverlässigkeit mithilfe einer "zuletzt bekannten gut" Metadaten (z. B OpenIdConnectMetadata. ).
  • Asynchrone Verarbeitung.

Für die meisten Benutzer sollte diese Änderung kein Problem darstellen, da sich der Typ der Eigenschaften (SecurityToken) nicht geändert hat, und Sie sollten den tatsächlichen Typ nicht betrachten.

Wenn Sie jedoch eine der betroffenen SecurityToken Eigenschaften auf JwtSecurityToken heruntercasten (z. B. um die Claims abzurufen), haben Sie zwei Optionen:

  • Die Eigenschaft auf JsonWebToken abwerten.

    service.Configure<JwtBearerOptions>(JwtBearerDefaults.AuthenticationScheme, options => {
        options.Events.OnTokenValidated = (context) => {
            // Replace your cast to JwtSecurityToken.
            JsonWebToken token = context.SecurityToken as JsonWebToken;
            // Do something ...
        };
    });
    
  • Legen Sie eine der UseSecurityTokenValidators booleschen Eigenschaften für die entsprechenden Optionen (JwtBearerOptions, WsFederationOptionsoder OpenIdConnectOptions) auf true. Durch das Festlegen der Eigenschaft auf true verwenden die Authentifizierungshandler weiterhin JwtTokenValidators und erzeugen weiterhin JwtSecurityToken-Tokens.

    service.Configure<JwtBearerOptions>(JwtBearerDefaults.AuthenticationScheme,  options => {
        options.UseSecurityTokenValidators = true;
        options.Events.OnTokenValidated = (context) => {
            // As you were doing before
            JwtSecurityToken token = context.SecurityToken as JwtSecurityToken;
            // Do something ...
        };
    });
    

Betroffene APIs