0Pricing
C# Academy · Lektion

Tokens ausstellen

Erzeugen Sie beim Login signierte Tokens.

Tokens ausstellen ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 3 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.

Ausstellen im Vergleich zur Validierung

Bisher haben Sie Tokens validiert. Nun werden Sie sie ausstellen: Nachdem sich ein Benutzer erfolgreich angemeldet hat, erstellt Ihre API ein signiertes JWT und gibt es zurück.

Der zentrale Typ dafür ist JwtSecurityTokenHandler aus System.IdentityModel.Tokens.Jwt.

dotnet add package System.IdentityModel.Tokens.Jwt

Der Signaturschlüssel

Zum Signieren eines Tokens benötigen Sie einen Schlüssel. Bei HS256 verwenden Sie dasselbe symmetrische Geheimnis, das auch der Validator nutzt.

Halten Sie dieses Geheimnis aus der Versionsverwaltung heraus – laden Sie es aus der Konfiguration oder einem Geheimnisspeicher.

var key = new SymmetricSecurityKey(
    Encoding.UTF8.GetBytes(configuration["Jwt:Key"]!));

SigningCredentials

SigningCredentials verbindet den Schlüssel mit dem Algorithmus. Für einen symmetrischen Schlüssel verwenden Sie SecurityAlgorithms.HmacSha256.

var creds = new SigningCredentials(
    key,
    SecurityAlgorithms.HmacSha256);

Claims erstellen

Legen Sie fest, welche Daten in das Token aufgenommen werden. Fügen Sie immer ein Subject (die Benutzer-ID) sowie alle Rollen oder Daten hinzu, die die API benötigt.

Fügen Sie ein eindeutiges jti hinzu, damit jedes Token identifiziert werden kann.

var claims = new List<Claim>
{
    new Claim(JwtRegisteredClaimNames.Sub, user.Id.ToString()),
    new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
    new Claim(ClaimTypes.Name, user.UserName),
    new Claim(ClaimTypes.Role, user.Role)
};

JwtSecurityToken erstellen

JwtSecurityToken bündelt Aussteller, Zielgruppe, Claims, Ablaufzeit und Anmeldeinformationen für die Signatur in einem Token-Objekt.

var token = new JwtSecurityToken(
    issuer: configuration["Jwt:Issuer"],
    audience: configuration["Jwt:Audience"],
    claims: claims,
    notBefore: DateTime.UtcNow,
    expires: DateTime.UtcNow.AddMinutes(15),
    signingCredentials: creds);

In eine Zeichenfolge serialisieren

Das Token-Objekt muss vor dem Senden an den Client in seine kompakte Zeichenfolgenform header.payload.signature geschrieben werden.

var handler = new JwtSecurityTokenHandler();
string jwt = handler.WriteToken(token);
// jwt now looks like eyJhbGciOiJI...

Ein wiederverwendbarer Token-Service

Kapseln Sie die Logik in einem Service, damit Controller übersichtlich bleiben und die Konfiguration an einer Stelle liegt.

public class TokenService(IConfiguration config)
{
    public string CreateAccessToken(AppUser user)
    {
        var key = new SymmetricSecurityKey(
            Encoding.UTF8.GetBytes(config["Jwt:Key"]!));
        var creds = new SigningCredentials(
            key, SecurityAlgorithms.HmacSha256);
        var claims = new[]
        {
            new Claim(JwtRegisteredClaimNames.Sub, user.Id.ToString()),
            new Claim(ClaimTypes.Role, user.Role)
        };
        var token = new JwtSecurityToken(
            config["Jwt:Issuer"], config["Jwt:Audience"],
            claims, expires: DateTime.UtcNow.AddMinutes(15),
            signingCredentials: creds);
        return new JwtSecurityTokenHandler().WriteToken(token);
    }
}

Den Login-Endpunkt verdrahten

Der Login-Endpunkt überprüft die Anmeldedaten, ruft anschließend den Service auf und gibt das Token an den Client zurück.

app.MapPost("/login", (LoginDto dto, TokenService tokens) =>
{
    var user = Authenticate(dto.Username, dto.Password);
    if (user is null) return Results.Unauthorized();
    return Results.Ok(new { accessToken = tokens.CreateAccessToken(user) });
});

Symmetrisch oder asymmetrisch

HS256 verwendet dasselbe gemeinsame Geheimnis zum Signieren und Validieren. RS256 verwendet zum Signieren einen privaten Schlüssel und zum Validieren einen öffentlichen Schlüssel.

Asymmetrische Signaturen ermöglichen es Ihnen, den öffentlichen Schlüssel zu veröffentlichen, sodass andere Services Tokens validieren können, ohne jemals das Signaturgeheimnis zu besitzen.

var creds = new SigningCredentials(
    new RsaSecurityKey(rsaPrivateKey),
    SecurityAlgorithms.RsaSha256);

Den Service registrieren

Fügen Sie den Token-Service zur Dependency Injection hinzu, damit er in Endpunkte und Controller injiziert werden kann.

builder.Services.AddScoped<TokenService>();

Tokens kompakt und kurzlebig halten

Zwei bewährte Vorgehensweisen beim Ausstellen von Tokens:

  • Kompakt: Nehmen Sie nur Claims auf, die die API benötigt – das Token wird bei jeder Anfrage übertragen.
  • Kurzlebig: Access-Tokens mit einer Lebensdauer von 5 bis 15 Minuten begrenzen den Schaden, falls eines davon offengelegt wird.
expires: DateTime.UtcNow.AddMinutes(15)

Kurzer Test

Überprüfen Sie, was Sie über das Ausstellen von Tokens gelernt haben.

Zusammenfassung

Sie haben signierte JWTs ausgestellt:

  • SigningCredentials verbindet Ihren Schlüssel mit einem Algorithmus.
  • Erstellen Sie eine Liste von Claim-Objekten und anschließend ein JwtSecurityToken mit Aussteller, Zielgruppe und Ablaufzeit.
  • JwtSecurityTokenHandler.WriteToken serialisiert es in die kompakte Zeichenfolge.
  • Halten Sie Tokens kompakt und kurzlebig.

Als Nächstes geht es um Refresh-Tokens und Strategien für den Ablauf.

Häufig gestellte Fragen

Ist die Lektion „Tokens ausstellen“ kostenlos?

Ja — der vollständige Text von „Tokens ausstellen“ 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 „Tokens ausstellen“?

Erzeugen Sie beim Login signierte Tokens. 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 3 von 4.

Wie lange dauert die Lektion „Tokens ausstellen“?

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. JWT-Struktur und Claims
  2. JWT-Bearer-Authentifizierung konfigurieren
  3. Tokens ausstellen
  4. Refresh-Tokens und Ablauf
← Zurück zu C# Academy