0Pricing
C# Academy · Pelajaran

Menerbitkan Token

Hasilkan token bertanda tangan saat login.

Menerbitkan Token adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C# Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C# Academy mencakup 4 pelajaran total.

Menerbitkan versus Memvalidasi

Sejauh ini Anda telah memvalidasi token. Sekarang Anda akan menerbitkan token: setelah pengguna berhasil masuk, API Anda membuat JWT bertanda tangan dan mengembalikannya.

Tipe inti untuk keperluan ini adalah JwtSecurityTokenHandler dari System.IdentityModel.Tokens.Jwt.

dotnet add package System.IdentityModel.Tokens.Jwt

Kunci Penandatanganan

Untuk menandatangani token, Anda memerlukan kunci. Untuk HS256, gunakan kembali rahasia simetris yang digunakan validator.

Simpan rahasia ini di luar kendali versi - muat dari konfigurasi atau penyimpanan rahasia.

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

SigningCredentials

SigningCredentials memasangkan kunci dengan algoritme. Untuk kunci simetris, gunakan SecurityAlgorithms.HmacSha256.

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

Membangun Klaim

Tentukan apa saja yang dimasukkan ke dalam token. Selalu sertakan subjek (id pengguna) serta peran atau data apa pun yang diperlukan API.

Tambahkan jti yang unik agar setiap token dapat diidentifikasi.

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)
};

Membuat JwtSecurityToken

JwtSecurityToken menggabungkan penerbit, audiens, klaim, masa kedaluwarsa, dan kredensial penandatanganan ke dalam sebuah objek token.

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

Membuat Serialisasi ke String

Objek token harus ditulis ke dalam bentuk string ringkas header.payload.signature sebelum dikirimkan kepada klien.

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

Layanan Token yang Dapat Digunakan Kembali

Bungkus logika tersebut dalam sebuah layanan agar pengendali tetap bersih dan konfigurasi berada di satu tempat.

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);
    }
}

Menghubungkan Titik Akhir Login

Titik akhir login memverifikasi kredensial, lalu memanggil layanan dan mengembalikan token kepada klien.

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) });
});

Simetris versus Asimetris

HS256 menggunakan satu rahasia bersama untuk penandatanganan dan validasi. RS256 menggunakan kunci privat untuk menandatangani dan kunci publik untuk memvalidasi.

Penandatanganan asimetris memungkinkan Anda memublikasikan kunci publik agar layanan lain dapat memvalidasi token tanpa pernah menyimpan rahasia penandatanganan.

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

Mendaftarkan Layanan

Tambahkan layanan token ke injeksi dependensi agar layanan tersebut dapat diinjeksikan ke titik akhir dan pengendali.

builder.Services.AddScoped<TokenService>();

Menjaga Token Tetap Ringkas dan Singkat

Dua praktik terbaik saat menerbitkan token:

  • Ringkas: sertakan hanya klaim yang diperlukan API - token dikirimkan pada setiap permintaan.
  • Berumur pendek: access token selama 5 hingga 15 menit membatasi kerugian jika salah satunya bocor.
expires: DateTime.UtcNow.AddMinutes(15)

Pemeriksaan Cepat

Pastikan pemahaman Anda tentang penerbitan token.

Ringkasan

Anda telah menerbitkan JWT bertanda tangan:

  • SigningCredentials memasangkan kunci Anda dengan suatu algoritme.
  • Bangun daftar Claim, lalu JwtSecurityToken dengan penerbit, audiens, dan masa kedaluwarsa.
  • JwtSecurityTokenHandler.WriteToken membuat serialisasinya menjadi string ringkas.
  • Jaga agar token tetap ringkas dan berumur pendek.

Selanjutnya: refresh token dan strategi kedaluwarsa.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Menerbitkan Token” gratis?

Ya — teks lengkap “Menerbitkan Token” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C# Academy, upgrade ke CoddyKit PRO. Kursus C# Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Menerbitkan Token”?

Hasilkan token bertanda tangan saat login. Kamu berlatih C# Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C# Academy?

Tidak diperlukan pengalaman sebelumnya. C# Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Menerbitkan Token” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C# Academy ini?

Ya. Setiap pelajaran C# Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Struktur dan Klaim JWT
  2. Mengonfigurasi Autentikasi JWT Bearer
  3. Menerbitkan Token
  4. Token Refresh dan Kedaluwarsa
← Kembali ke C# Academy