0Pricing
C# Academy · Lektion

Benutzerdefinierte Autorisierungsanforderungen

Erstellen Sie eigene Anforderungen und Handler.

Benutzerdefinierte Autorisierungsanforderungen ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C# Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.

Wenn integrierte Funktionen nicht ausreichen

Manche Regeln lassen sich nicht mit RequireRole oder RequireClaim ausdrücken – zum Beispiel „muss mindestens 18 Jahre alt sein“ oder „muss Eigentümer dieser Ressource sein“.

Dafür schreiben Sie eine benutzerdefinierte Anforderung und einen passenden Handler.

// Rule: user must be older than a configurable minimum age

IAuthorizationRequirement

Eine Anforderung ist ein Marker, der die Daten der Regel enthält. Sie implementiert die leere Schnittstelle IAuthorizationRequirement.

public class MinimumAgeRequirement : IAuthorizationRequirement
{
    public int MinimumAge { get; }
    public MinimumAgeRequirement(int minimumAge) =>
        MinimumAge = minimumAge;
}

AuthorizationHandler

Ein Handler enthält die Logik. Leiten Sie ihn von AuthorizationHandler<TRequirement> ab und überschreiben Sie HandleRequirementAsync.

public class MinimumAgeHandler
    : AuthorizationHandler<MinimumAgeRequirement>
{
    protected override Task HandleRequirementAsync(
        AuthorizationHandlerContext context,
        MinimumAgeRequirement requirement)
    {
        // logic goes here
        return Task.CompletedTask;
    }
}

Die Anforderung erfüllen

Untersuchen Sie im Handler die Claims des Benutzers. Wenn die Regel erfüllt ist, rufen Sie context.Succeed(requirement) auf. Andernfalls kehren Sie einfach zurück, ohne den Aufruf auszuführen.

var dobClaim = context.User.FindFirst("birthdate");
if (dobClaim is null) return Task.CompletedTask;

var dob = DateTime.Parse(dobClaim.Value);
int age = DateTime.UtcNow.Year - dob.Year;
if (dob > DateTime.UtcNow.AddYears(-age)) age--;

if (age >= requirement.MinimumAge)
    context.Succeed(requirement);

return Task.CompletedTask;

Erfüllen, nicht fehlschlagen

Rufen Sie vorzugsweise Succeed auf, wenn die Anforderung erfüllt ist, und tun Sie andernfalls nichts. Rufen Sie context.Fail() nur auf, wenn Sie unabhängig von anderen Handlern für dieselbe Anforderung einen garantierten Fehlschlag erzwingen möchten.

// Soft: let other handlers also try
if (ok) context.Succeed(requirement);

// Hard: force failure no matter what
if (blocked) context.Fail();

Den Handler registrieren

Registrieren Sie Handler in DI als IAuthorizationHandler. Sie sind normalerweise Singletons, außer wenn sie von Scoped-Services abhängen.

builder.Services.AddSingleton<
    IAuthorizationHandler, MinimumAgeHandler>();

An eine Policy binden

Fügen Sie die Anforderung mit AddRequirements (oder Requirements.Add) einer benannten Policy hinzu. Der Handler wird automatisch anhand des Typs zugeordnet.

builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("AtLeast18", policy =>
        policy.AddRequirements(new MinimumAgeRequirement(18)));
});

Die Policy verwenden

Wenden Sie sie wie jede andere benannte Policy an.

[Authorize(Policy = "AtLeast18")]
[HttpGet("age-restricted")]
public IActionResult Restricted() => Ok();

Ressourcenbasierte Autorisierung

Um eine bestimmte Instanz zu autorisieren (z. B. „nur der Dokumenteigentümer darf es bearbeiten“), verwenden Sie die Überladung für Ressourcen. Die Ressource wird an den Handler-Kontext übergeben.

public class OwnerHandler
    : AuthorizationHandler<OwnerRequirement, Document>
{
    protected override Task HandleRequirementAsync(
        AuthorizationHandlerContext context,
        OwnerRequirement requirement,
        Document resource)
    {
        var userId = context.User.FindFirstValue(
            ClaimTypes.NameIdentifier);
        if (resource.OwnerId.ToString() == userId)
            context.Succeed(requirement);
        return Task.CompletedTask;
    }
}

IAuthorizationService aufrufen

Ressourcenbasierte Prüfungen werden innerhalb einer Aktion imperativ über den injizierten IAuthorizationService ausgeführt.

public async Task<IActionResult> Edit(int id)
{
    var doc = await _db.Documents.FindAsync(id);
    var result = await _authz.AuthorizeAsync(
        User, doc, "DocumentOwner");
    if (!result.Succeeded) return Forbid();
    return Ok(doc);
}

Mehrere Handler pro Anforderung

Eine Anforderung kann mehrere Handler besitzen. Wenn ein beliebiger Handler erfolgreich ist, gilt die Anforderung als erfüllt. Dadurch lassen sich ODER-Bedingungen sauber abbilden (außer ein Handler ruft Fail auf).

// e.g. allow if owner OR if admin role
services.AddSingleton<IAuthorizationHandler, OwnerHandler>();
services.AddSingleton<IAuthorizationHandler, AdminOverrideHandler>();

Kurze Überprüfung

Testen Sie Ihr Verständnis von Handlern.

Zusammenfassung

Sie haben eine benutzerdefinierte Autorisierung erstellt:

  • Eine IAuthorizationRequirement enthält die Daten der Regel.
  • Ein AuthorizationHandler<T> enthält die Logik und ruft Succeed auf.
  • Registrieren Sie den Handler als IAuthorizationHandler und fügen Sie die Anforderung einer Policy hinzu.
  • Ressourcenbasierte Handler und IAuthorizationService autorisieren bestimmte Instanzen.

Damit ist der Autorisierungskurs abgeschlossen.

Häufig gestellte Fragen

Ist die Lektion „Benutzerdefinierte Autorisierungsanforderungen“ kostenlos?

Ja — der vollständige Text von „Benutzerdefinierte Autorisierungsanforderungen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C# Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Benutzerdefinierte Autorisierungsanforderungen“?

Erstellen Sie eigene Anforderungen und Handler. Du übst C# Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C# Academy zu starten?

Keine Vorkenntnisse erforderlich. C# Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Benutzerdefinierte Autorisierungsanforderungen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C# Academy-Lektion Code schreiben und ausführen?

Ja. Jede C# Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Rollenbasierte Autorisierung
  2. Claims-basierte Autorisierung
  3. Richtlinienbasierte Autorisierung
  4. Benutzerdefinierte Autorisierungsanforderungen
← Zurück zu C# Academy