Struktur dan Klaim JWT
Pahami header, payload, dan tanda tangan.
Struktur dan Klaim JWT adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 1 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.
Apa Itu JWT?
JSON Web Token (JWT) adalah format token ringkas dan aman untuk URL yang digunakan untuk mengirimkan klaim dengan aman antara dua pihak. Di ASP.NET Core, format ini merupakan cara paling umum untuk mengautentikasi API tanpa status.
JWT hanyalah string yang terdiri dari tiga bagian yang dikodekan dengan Base64Url dan digabungkan menggunakan titik: header.payload.signature.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0Iiwicm9sZSI6ImFkbWluIn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5cHeader
header menjelaskan cara token ditandatangani. Header merupakan objek JSON kecil yang dikodekan dengan Base64Url menjadi segmen pertama.
alg menyebutkan algoritma penandatanganan (misalnya, HS256, RS256), sedangkan typ hampir selalu berupa JWT.
{
"alg": "HS256",
"typ": "JWT"
}Muatan
Muatan membawa klaim—pernyataan tentang pengguna dan metadata token. Muatan merupakan segmen kedua.
Penting: muatan hanya dikodekan, bukan dienkripsi. Siapa pun dapat menguraikannya, jadi jangan pernah menaruh rahasia di sini.
{
"sub": "1234",
"name": "Alice",
"role": "admin",
"exp": 1735689600
}Tanda Tangan
Tanda tangan menjamin bahwa token tidak telah diutak-atik. Server menghitungnya dari header yang dikodekan, muatan yang dikodekan, dan kunci rahasia.
Jika seseorang mengubah satu karakter saja dari muatan, tanda tangan tidak lagi cocok dan validasi gagal.
HMACSHA256(
base64UrlEncode(header) + "." + base64UrlEncode(payload),
secretKey
)Klaim Terdaftar
Beberapa nama klaim dibakukan oleh spesifikasi JWT (RFC 7519). Nama-nama tersebut menggunakan kunci singkat yang terdiri dari tiga huruf:
iss- penerbitsub- subjek (id pengguna)aud- audiensexp- waktu kedaluwarsa (detik Unix)nbf- tidak valid sebelumiat- diterbitkan pada
{
"iss": "https://api.myapp.com",
"aud": "myapp-clients",
"sub": "42",
"exp": 1735689600,
"iat": 1735686000
}Klaim Kustom
Selain kumpulan klaim terdaftar, Anda dapat menambahkan klaim kustom apa pun yang diperlukan aplikasi Anda—peran, izin, id penyewa, email, dan lainnya.
Jaga agar muatan tetap kecil: setiap klaim dikirim dalam setiap permintaan.
{
"sub": "42",
"email": "alice@myapp.com",
"role": "admin",
"tenant_id": "acme",
"permissions": ["orders:read", "orders:write"]
}Klaim di ASP.NET Core
Di .NET, klaim dimodelkan oleh tipe System.Security.Claims.Claim. Setiap klaim merupakan pasangan tipe / nilai.
Saat JWT divalidasi, ASP.NET Core mengubah setiap entri payload menjadi Claim pada ClaimsPrincipal pengguna.
var claims = new List<Claim>
{
new Claim(ClaimTypes.NameIdentifier, "42"),
new Claim(ClaimTypes.Name, "Alice"),
new Claim(ClaimTypes.Role, "admin"),
new Claim("tenant_id", "acme")
};ClaimsPrincipal dan ClaimsIdentity
Pengguna yang diautentikasi direpresentasikan oleh ClaimsPrincipal, yang membungkus satu atau beberapa objek ClaimsIdentity, yang masing-masing menyimpan sekumpulan klaim.
Di pengendali, Anda mengaksesnya melalui User.
// Inside a controller action
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
bool isAdmin = User.IsInRole("admin");
string? tenant = User.FindFirst("tenant_id")?.Value;Pemetaan Tipe Klaim
Secara bawaan, handler JWT memetakan kunci JWT singkat ke tipe klaim bergaya URI yang panjang (misalnya sub menjadi ClaimTypes.NameIdentifier).
Untuk mempertahankan nama singkat asli, nonaktifkan pemetaan masuk sekali saat startup.
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
// Now User.FindFirst("sub") returns the raw 'sub' claimMengapa Tidak Menggunakan Cookie Sesi Saja?
JWT bersifat mandiri: server dapat memvalidasinya hanya dengan menggunakan kunci penandatanganan, tanpa pencarian basis data atau penyimpanan sesi di sisi server.
Hal ini membuatnya ideal untuk API yang diskalakan secara horizontal dan layanan mikro, karena setiap simpul dapat memverifikasi token yang sama.
// Client sends the token on every request:
// Authorization: Bearer eyJhbGciOiJIUzI1Ni...Komprominya: Pencabutan
Karena JWT bersifat mandiri dan dipercaya hingga kedaluwarsa, Anda tidak dapat dengan mudah mencabut satu JWT sebelum waktu exp-nya.
Mitigasi yang umum adalah membuat access token berumur pendek dan memasangkannya dengan refresh token (yang akan dibahas nanti dalam kursus ini).
// Short-lived access token
exp = iat + 15 * 60; // 15 minutesPemeriksaan Cepat
Uji pemahaman Anda tentang struktur JWT.
Ringkasan
Anda telah mempelajari anatomi JWT dan cara kerja klaim di ASP.NET Core:
- JWT terdiri dari
header.payload.signature, yang masing-masing dikodekan dengan Base64Url. - Payload menyimpan klaim terdaftar dan khusus, yang dikodekan tetapi tidak dienkripsi.
- Tanda tangan menjamin integritas menggunakan rahasia atau pasangan kunci.
- .NET mengubah klaim menjadi
ClaimsPrincipalyang Anda baca melaluiUser.
Selanjutnya, Anda akan mengonfigurasi ASP.NET Core untuk memvalidasi token-token ini.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Struktur dan Klaim JWT” gratis?
Ya — teks lengkap “Struktur dan Klaim JWT” 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 “Struktur dan Klaim JWT”?
Pahami header, payload, dan tanda tangan. 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 1 dari 4.
Berapa lama pelajaran “Struktur dan Klaim JWT” 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
- Struktur dan Klaim JWT
- Mengonfigurasi Autentikasi JWT Bearer
- Menerbitkan Token
- Token Refresh dan Kedaluwarsa