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.JwtDer 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:
SigningCredentialsverbindet Ihren Schlüssel mit einem Algorithmus.- Erstellen Sie eine Liste von
Claim-Objekten und anschließend einJwtSecurityTokenmit Aussteller, Zielgruppe und Ablaufzeit. JwtSecurityTokenHandler.WriteTokenserialisiert 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
- JWT-Struktur und Claims
- JWT-Bearer-Authentifizierung konfigurieren
- Tokens ausstellen
- Refresh-Tokens und Ablauf