Verwenden Sie mehrere JWT Träger-Authentifizierung
Ist es möglich, Unterstützung für mehrere JWT Token Emittenten in ASP.NET Core 2?
Ich will eine API für externe service-und ich brauche zwei Quellen von JWT Token - FB und benutzerdefinierte JWT token Emittenten. In ASP.NET core ich einstellen kann das JWT-Authentifizierung für Träger auth-Schema, aber nur für eine Behörde:
services
.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.Authority = "https://securetoken.google.com/my-firebase-project"
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidIssuer = "my-firebase-project"
ValidateAudience = true,
ValidAudience = "my-firebase-project"
ValidateLifetime = true
};
}
Kann ich mehrere Emittenten und Publikum, aber kann ich nicht mehrere stellen.
- AFAIK können Sie eine beliebige Anzahl von Eigenschaften zu einem JWT. So, es gibt nichts stoppen Sie von der Aufnahme über zwei Emittenten, die Namen JWT. Das problem kommt, dass Ihre Anwendung brauchen würde, zu wissen, dass beide Tasten, wenn jeder Aussteller waren mit einem anderen Schlüssel zu signieren.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie ganz das erreichen, was Sie wollen:
Gehen wir durch die Unterschiede zwischen dem code und einer.
AddAuthentication
hat keine parameterWenn Sie eine Standard-Authentifizierungs-Schema, dann ist jeder einzelne request das Authentifizierungs-middleware wird versuchen Sie zum ausführen des authentication-handler im Zusammenhang mit der default authentication scheme. Da haben wir jetzt zwei opssible Authentifizierungsschemas, es gibt keinen Punkt, in dem eine von Ihnen.
Verwenden Sie eine andere überladung von
AddJwtBearer
Jede einzelne
AddXXX
Methode zum hinzufügen einer Authentifizierung hat mehrere überladungen:Nun, da Sie die gleiche Authentifizierungsmethode zweimal, aber Authentifizierungsschemas eindeutig sein müssen, müssen Sie verwenden die zweite überladung.
Update die default-policy
Da die Anforderungen nicht authentifiziert werden automatisch mehr, setzen
[Authorize]
Attribute auf einige Maßnahmen wird im Ergebnis die Anträge zurückgewiesen und eineHTTP 401
ausgestellt werden.Da, das ist nicht das, was wir wollen, denn wir wollen, dass die Authentifizierungs-Handler eine chance, sich zu authentifizieren, die Anforderung, wir die Standardrichtlinie ändern der Berechtigungs-system durch die Angabe sowohl der
Firebase
undCustom
Authentifizierungsschemas sollte versucht überprüft die Anfrage.Nicht verhindern, dass Sie von restriktiver auf einige Aktionen, die
[Authorize]
- Attribut hat eineAuthenticationSchemes
Eigenschaft, können Sie überschreiben die Authentifizierung Systeme gültig sind.Wenn du mehr komplexe Szenarien können Sie Gebrauch machen von policy-basierte Autorisierung. Ich finde die offizielle Dokumentation ist toll.
Stellen wir uns vor, einige Aktionen sind nur verfügbar, zu JWT Token ausgestellt von der Feuerstellung und muss eine Forderung mit einem bestimmten Wert; man könnte es so machen:
Könnte man dann verwenden
[Authorize(Policy = "FirebaseAdministrators")]
auf einige Aktionen.Authorization : Bearer <token>
Sie, dass der header seinAuthorization : Firebase <token>
zum Beispiel? Wenn er versucht wird, diese Lösung bekam ich die Fehlermeldung: "No authentication handler registriert ist für das Schema 'Träger'.".AddJwtBearer
- Methode aufruft.