Wie passen Sie die Standard -Windows -AutheticationStateProvider in die Blazor Server -App an?
Posted: 24 Feb 2025, 12:57
Ich habe eine Blazor -Server -App, die die Windows -Authentifizierung verwendet, um Benutzer zu identifizieren. > Ich habe eine Klasse geschrieben, die in Benutzername angemeldet ist und Rollen aus einer Datenbank bewirkt, und dann den aktuellen Principal so aktualisiert, dass die Benutzeroberfläche die angegebenen Rollen für die ordnungsgemäß nutzen kann Benutzer.
Ich vermeide EntityFramework- und Core -Identitäts -Gerüstcode aus Gründen, die ich hier nicht teilen kann. p>
Das funktioniert alles einwandfrei, solange ich nicht vergesse, die FirmaAuthentication auf jeder Seite zu injizieren, die ich verwenden möchte.
Gibt es eine Möglichkeit, meine Klasse automatisch in jede Seite zu injizieren, ohne @Inject ?
Ich bin mir bewusst, dass ich eine benutzerdefinierte Authentifizierungsklasse schreiben kann Als Service, aber wenn ich das tue, verliere ich den Zugriff auf den aktuell angemeldeten Benutzernamen und ich kann daher keine Rollen aus der Datenbank abrufen. .User.ididentity.name Aber das liegt nicht im Bereich eines Teils in einer Balzor -Server -App.
Wie kann ich Windows nutzen AuthenticationStateProvider und gleichzeitig ihre Rollen anpassen, ohne die Anpassung überall injizieren zu müssen?
Ich vermeide EntityFramework- und Core -Identitäts -Gerüstcode aus Gründen, die ich hier nicht teilen kann. p>
Code: Select all
public class CompanyAuthentication
{
public CompanyAuthentication(AuthenticationStateProvider auth)
{
var result = auth.GetAuthenticationStateAsync().Result;
// here I have access to the current username:
string username = result.User.Identity.Name;
// now I can fetch roles from file, but for simplicity, I will use the following:
if(username.BeginsWith("admin"))
{
var claims = new ClaimsIdentity(new Claim[] {new Claim(ClaimType.Role, "admin")});
result.User.AddIdentity(claims); // this will have an effect on UI
}
}
}
< /code>
Ich habe auch die obige Klasse als Dienst in startup.cs < /p>
hinzugefügtservices.AddScoped();
< /code>
Jetzt, auf jeder Rasierseite, mache ich einfach: < /p>
@page "/counter"
@inject CompanyAuthentication auth
Welcome admin
You are not authorized
Gibt es eine Möglichkeit, meine Klasse automatisch in jede Seite zu injizieren, ohne @Inject ?
Ich bin mir bewusst, dass ich eine benutzerdefinierte Authentifizierungsklasse schreiben kann Als Service, aber wenn ich das tue, verliere ich den Zugriff auf den aktuell angemeldeten Benutzernamen und ich kann daher keine Rollen aus der Datenbank abrufen. .User.ididentity.name Aber das liegt nicht im Bereich eines Teils in einer Balzor -Server -App.
Wie kann ich Windows nutzen AuthenticationStateProvider und gleichzeitig ihre Rollen anpassen, ohne die Anpassung überall injizieren zu müssen?