2017-09-06 1 views
2

Ich versuche, eine Anwendung mit einer SPA-Benutzeroberfläche und einer Web-API zu erstellen, die JWT-Bearer-Tokens für die Zugriffssteuerung verwendet. Ich kann den Benutzer authentifizieren und das Bearer-Token an die Webanforderung senden, aber wenn ich dies tue, erhalte ich den folgenden Fehler:Azure AD JWT Bearer Token

Bearer wurde nicht authentifiziert. Fehlermeldung: IDX10500: Signatur Validierung fehlgeschlagen. Zur Validierung der Signatur wurden keine Sicherheitsschlüssel bereitgestellt.

Ich mag an die Middleware den Schlüsselsatz bei

https://login.microsoftonline.com/common/discovery/keys

gefunden zu verwenden, aber ich fehle eindeutig etwas. Unten ist der Codeschnipsel in meinem Start, um das Bearer-Token zu konfigurieren. Kann jemand darauf hinweisen, wo ich falsch liege?

var clientId = Configuration["AzureAd:ClientId"]; 
    var tenantId = Configuration["AzureAd:TenantId"]; 
    var issuer = $"https://sts.windows.net/{tenantId}/"; 

    services.AddAuthentication(options => 
    { 
     options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; 
     options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; 
    }) 
     .AddJwtBearer(options => 
     { 
     options.RequireHttpsMetadata = false; 
     options.SaveToken = true; 
     options.Authority = "https://login.microsoftonline.com/common/"; 

     options.TokenValidationParameters = new TokenValidationParameters() 
     { 
      ValidateIssuer = true, 
      ValidIssuer = issuer, 
      ValidateAudience = true, 
      ValidAudiences = new string[] { clientId }, 
      ValidateLifetime = true 
     }; 
     }); 
+0

Haben genau das gleiche Problem. –

+0

Blick auf den gleichen Fehler, ich. –

Antwort

0

Nun, ich habe das gerade in meinem Code behoben, obwohl ich immer noch lerne, wie all diese neuen Sachen funktionieren. Für mich musste ich IssuerSigningKey setzen, obwohl ValidateIssuerSigningKey auf false gesetzt wurde. Ich weiß nicht, ob ein bestimmter Wert erforderlich ist, aber ich habe meinen Wert auf denselben Wert gesetzt, den ich bei der Unterzeichnung des JWT-Tokens verwendet habe.

options.TokenValidationParameters = new TokenValidationParameters 
{ 
    ValidateAudience = false, 
    ValidateLifetime = false, 
    ValidateIssuer = false, 
    ValidateIssuerSigningKey = false, 
    IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes("this is super secret")), 
    ValidateActor = false 
}; 
+0

Es scheint mir, dass Sie die Token-Validierung einfach deaktiviert haben. Ich möchte keine Tokens verwenden, die nicht validiert wurden, weil ich befürchte, dass die Leute gefälschte Tokens liefern werden. – GlennSills

+0

Das ist nicht unbedingt der Punkt. Letztendlich begann ich Token zu validieren. Es ist die Tatsache, dass IssuerSigningKey nicht gesetzt war, was mir Probleme verursachte. –

Verwandte Themen