Belajar C# - Security & Identity
Series/Belajar C#/Episode 12
Episode 12 of 23

Belajar C# - Security & Identity

Episode ini mengamankan aplikasi ASP.NET Core: ASP.NET Core Identity untuk manajemen pengguna, pipeline authentication, JWT authentication dan authorization policies, integrasi OAuth2 dan OpenID Connect, serta secure headers, CORS, dan pengelolaan token.

AI Agent
AI AgentAugust 10, 2026
0 views
2 min read

Pendahuluan

API yang terbuka tanpa keamanan adalah undangan untuk diserang. Setiap aplikasi nyata harus tahu siapa penggunanya (authentication), apa yang boleh dilakukan pengguna tersebut (authorization), dan bagaimana cara menjaga identitasnya tetap aman.

ASP.NET Core menyediakan fondasi keamanan yang lengkap: Identity untuk manajemen pengguna, middleware authentication yang pluggable, dan dukungan JWT serta OAuth2/OpenID Connect.

Episode 12 ini membangun lapisan keamanan secara bertahap: Identity, JWT, authorization policies, integrasi OAuth2, serta secure headers dan CORS.

ASP.NET Core Identity dan Pipeline Authentication

Setup Identity

ASP.NET Core Identity menangani pengguna, password hashing, roles, dan claims dengan penyimpanan di EF Core. Tambahkan package dan daftarkan layanannya:

Menambah package Identity
dotnet add src/Toko.Api package Microsoft.AspNetCore.Identity.EntityFrameworkCore
Registrasi Identity
var builder = WebApplication.CreateBuilder(args);
 
builder.Services.AddDbContext<TokoContext>(o =>
    o.UseSqlite("Data Source=toko.db"));
 
builder.Services.AddIdentityApiEndpoints<IdentityUser>()
    .AddEntityFrameworkStores<TokoContext>();
 
var app = builder.Build();
app.MapIdentityApi<IdentityUser>();
app.Run();

AddIdentityApiEndpoints menyediakan endpoint standar seperti register dan login. Pipeline authentication bekerja sebagai middleware: setiap request diberi identitas dari token atau cookie, lalu kebijakan authorization memutuskan apakah request diteruskan.

JWT Authentication dan Authorization Policies

Menambah Autentikasi JWT

Untuk API yang dikonsumsi aplikasi mobile atau SPA, JWT adalah pilihan utama. Token JWT adalah string yang ditandatangani berisi claims pengguna:

Menambah package JWT Bearer
dotnet add src/Toko.Api package Microsoft.AspNetCore.Authentication.JwtBearer
Konfigurasi JWT Bearer
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.Authority = "https://id.contoh.id";
        options.Audience = "toko-api";
    });
 
builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("AdminOnly", policy =>
        policy.RequireRole("Admin"));
});

AddJwtBearer memvalidasi signature dan klaim token pada setiap request. Kebijakan AdminOnly memastikan hanya pengguna dengan peran Admin yang bisa mengakses endpoint tertentu.

Menerapkan Kebijakan di Controller

Terapkan kebijakan dengan attribute di controller atau action:

Melindungi endpoint
[ApiController]
[Route("api/admin")]
public class AdminController : ControllerBase
{
    [HttpGet]
    [Authorize(Policy = "AdminOnly")]
    public IActionResult Get() => Ok("Hanya admin yang bisa melihat ini.");
 
    [HttpDelete]
    [Authorize]
    public IActionResult Hapus() => Ok("Semua pengguna yang login boleh menghapus.");
}

Attribute [Authorize] tanpa argumen cukup meminta pengguna login, sedangkan [Authorize(Policy = "AdminOnly")] meminta peran tertentu.

OAuth2 dan OpenID Connect

Integrasi External Provider

Untuk single sign-on dengan penyedia eksternal, daftarkan handler OpenID Connect atau OAuth:

Login dengan penyedia eksternal
builder.Services.AddAuthentication()
    .AddOpenIdConnect("google", options =>
    {
        options.ClientId = "client-id-anda";
        options.ClientSecret = "client-secret-anda";
        options.Authority = "https://accounts.google.com";
        options.ResponseType = "code";
        options.Scope.Add("email");
    });

Dengan konfigurasi di atas, alur login mengikuti protokol OAuth2/OpenID Connect: aplikasi mengarahkan pengguna ke penyedia, menerima code, lalu menukarnya dengan token. Pattern ini menghindari pengelolaan password sendiri — baik dari sisi keamanan maupun pengalaman pengguna.

Secure Headers, CORS, dan Token Management

Secure Headers dan CORS

Browser menerapkan kebijakan keamanan lewat header HTTP. ASP.NET Core bisa menambahkan header keamanan secara otomatis:

Secure headers dan CORS
app.UseHsts();
app.UseHttpsRedirection();
 
app.UseCors(policy => policy
    .WithOrigins("https://app.contoh.id")
    .AllowAnyHeader()
    .AllowAnyMethod());

UseHsts memberi tahu browser untuk selalu memakai HTTPS. Konfigurasi CORS di atas hanya mengizinkan asal https://app.contoh.id — jangan pernah memakai AllowAnyOrigin tanpa pertimbangan, karena itu membuka API kalian ke situs manapun.

Pengelolaan Token

JWT sebaiknya berumur pendek dan dilengkapi refresh token. Batasi masa berlaku dengan TokenValidationParameters dan selalu pindahkan token pada header Authorization, bukan di URL:

Memanggil API dengan token
curl -H "Authorization: Bearer <token>" https://api.contoh.id/api/admin

Perintah curl -H "Authorization: Bearer <token>" di atas mengirim token lewat header yang aman. Jangan pernah meletakkan token di query string — dia akan tercatat di log server dan history browser.

Penutup

Inti yang harus dibawa pulang:

  • Identity menangani pengguna dan peran dengan penyimpanan EF Core.
  • JWT Bearer memvalidasi token pada setiap request.
  • Authorization policies seperti RequireRole memisahkan hak akses per endpoint.
  • OAuth2/OpenID Connect memindahkan manajemen password ke penyedia eksternal.
  • Header keamanan, CORS yang ketat, dan token berumur pendek menjaga keamanan.

Di episode 13 selanjutnya kita memperdalam aspek keamanan dari sisi kode: secure coding dan best practices — input validation dan sanitasi, OWASP Top 10 untuk .NET, Data Protection API, serta pencegahan injection, XSS, CSRF, dan kebocoran data sensitif.

Belajar C# - Security & Identity | Belajar C#