2

Meine SPA-Anwendung (mit Aurelia) ruft meine ASP.NET Core 2 Web API auf. Ich muss Benutzer mit Google OIDC-Provider authentifizieren und auch die Web-API mit der gleichen Methode sichern.SPA (Aurelia) + ASP.NET Core WebAPI + Google-Authentifizierung

Derzeit kann ich Benutzer auf der Client (SPA) -Seite authentifizieren und ID-Token und Zugriffstoken abrufen. Mit jedem API-Aufruf sende ich das Zugriffs-Token in der Kopfzeile.

Jetzt bin ich mir nicht sicher, wie man mit der Serverseite umgehen muss, um das Token zu validieren und den Zugriff auf die API zu gewähren oder zu verweigern. Ich habe offiziellen Dokumenten gefolgt, wie man externe Login-Provider hinzufügt, aber es scheint nur für serverseitige MVC-Anwendungen zu funktionieren.

Gibt es einen einfachen Weg, wie man das macht?

Ich denke zum Beispiel kann IdentityServer4 dieses Szenario unterstützen, aber es scheint mir zu komplex für das, was ich tun muss. Ich brauche schließlich keinen eigenen Identitäts-/Autorisierungsserver.

Update:

Basierend auf Miroslav Popovic Antwort, meine Konfiguration für ASP.NET Core 2.0 sieht wie folgt aus:

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(o => 
    {   
    o.Authority = "https://accounts.google.com"; 
    o.TokenValidationParameters = new TokenValidationParameters 
    { 
     ValidIssuer = "accounts.google.com", 
     ValidAudience = "xxxxxxxxxxxxx.apps.googleusercontent.com", 
     ValidateAudience = true, 
     ValidateIssuer = true 
    }; 
    }); 

    services.AddMvc(); 
} 

Und in Configure() nenne ich app.UseAuthentication().

Bei Verwendung dieses Setups erhalte ich Fehlermeldung Kein SecurityTokenValidator für Token verfügbar.

Update 2:

ich es Arbeit gemacht. Die Serverkonfiguration ist korrekt. Das Problem war, ich sendete access_token an die API anstelle von id_token.

Antwort

1

Da Sie bereits über das Zugriffstoken verfügen, sollte es nicht zu schwierig sein, es zum Hinzufügen von Authentifizierung zu verwenden. Sie würden etwas in dieser Richtung müssen (nicht getestet):

// Inside Startup.cs, ConfigureServices method 
services 
    .AddAuthentication(JwtBearerDefaults.AuthenticationScheme) 
    .AddJwtBearer(
     options => 
     { 
      var tokenValidationParameters = new TokenValidationParameters 
      { 
       ValidIssuer = "accounts.google.com", 
       ValidateAudience = false 
      }; 

      options.MetadataAddress = "https://accounts.google.com/.well-known/openid-configuration"; 
      options.TokenValidationParameters = tokenValidationParameters; 
    }); 

// Inside Startup.cs, Configure method 
app.UseAuthentication(); // Before MVC middleware 
app.UseMvc(); 

// And of course, on your controllers: 
[Authorize] 
public class MyApiController : Controller 

This post von Paul Rowe könnte einige mehr helfen, aber beachten Sie, dass es für ASP.NET Core-1.x und Authentifizierungs-APIs geschrieben ein wenig verändert in 2.0.

Es gibt auch viele Informationen hier auf SO, wie this question.

+0

Danke für die Hilfe. Ich habe den Code ausprobiert (ich habe ihn für 2.0 angepasst), aber der Server schlägt mit der Meldung fehl: "Kein SecurityTokenValidator für Token verfügbar." Ich bin mir nicht sicher, warum das Token, das ich von SPA poste, direkt von Google kommt. –

+0

Ich habe die ursprüngliche Frage mit meinem aktuellen Code aktualisiert. –

+0

Ich sehe, dass Sie es geschafft haben, großartig! –

Verwandte Themen