Menerapkan kontrol akses pada service SOAP: membandingkan HTTP Basic Digest, UsernameToken, mutual TLS, dan SSO dengan SAML WS-Trust, lalu menerapkan RBAC di level operasi, menjaga kerahasiaan credentials dengan vault, dan memahami perbedaan autentikasi dan otorisasi.

Setelah di episode 15 kita membangun WS-Security dengan WSS4J, sekarang kita jawab pertanyaan krusial: siapa yang boleh memanggil, dan apa yang boleh ia lakukan? Ini adalah authentication (membuktikan identitas) dan authorization (menentukan hak akses) — dua hal yang sering disalahartikan sebagai satu.
Mengapa penting? Di integrasi B2B, setiap mitra punya hak yang berbeda: mitra pengecekan saldo tidak boleh bisa transfer, mitra internal boleh melihat data sensitif. Kebocoran di layer ini bukan sekadar bug — ia adalah pintu masuk insiden keamanan. Episode ini membekali kalian memilih mekanisme yang tepat dan menerapkan kontrol akses dengan benar.
Contoh nyata: UsernameToken membuktikan "saya mitra bank B" (authentication); kebijakan RBAC menentukan "mitra bank B boleh getBalance tapi tidak transfer" (authorization). Jangan pernah mencampurnya.
Authorization: Basic base64(user:pass) di header HTTP. Sederhana, tetapi password hampir plaintext (hanya base64) — hanya aman di atas HTTPS.Dari episode 14-15: token di header Security, password digest berbasis nonce + timestamp.
Client dan server saling memverifikasi sertifikat di lapisan transport:
Untuk autentikasi pengguna manusia lintas organisasi, SOAP memakai SAML dan WS-Trust:
Security sebagai token.RequestSecurityToken (RST) ke STS (Security Token Service).<wsse:Security xmlns:wsse="...secext-1.0.xsd">
<saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
ID="saml-8821" IssueInstant="2026-08-16T02:30:00Z"
Version="2.0">
<saml:Subject>
<saml:NameID>user@mitra-bank.co.id</saml:NameID>
</saml:Subject>
<saml:Conditions NotBefore="2026-08-16T02:25:00Z"
NotOnOrAfter="2026-08-16T04:25:00Z"/>
</saml:Assertion>
</wsse:Security>Tip
Aturan pemilihan: integrasi mitra aplikasi-ke-aplikasi → UsernameToken (digest). Koneksi antar-institusi keuangan → mTLS (+ UsernameToken). Akses pengguna manusia / federasi lintas organisasi → SAML/WS-Trust. Mulai dari yang paling sederhana yang memenuhi kebutuhan, jangan langsung terberat.
Setelah identitas terbukti, tentukan hak per operasi. Implementasi RBAC paling sederhana adalah peta (peran → daftar operasi):
public class AccessControl {
private static final Map<String, Set<String>> ROLE_OPS =
Map.of(
"mitra-bank-b", Set.of("getBalance", "getExchangeRate"),
"mitra-bank-c", Set.of("getBalance", "transfer"),
"internal", Set.of("getBalance", "transfer", "audit")
);
public static void check(String role, String operation) {
if (!ROLE_OPS.getOrDefault(role, Set.of()).contains(operation)) {
throw new SecurityException("Hak akses ditolak untuk " + operation);
}
}
}Panggil di awal setiap operasi service:
@WebMethod
public BigDecimal getBalance(String accountNo) {
String role = resolveRoleFromSecurityHeader();
AccessControl.check(role, "getBalance");
// ... logika bisnis
}Warning
Otorisasi harus dilakukan di service itu sendiri, bukan hanya di gateway. Gateway memberi lapisan pertama, tetapi service adalah garis pertahanan terakhir — ingat prinsip defense in depth. Mitra yang memanggil endpoint langsung tidak boleh lolos dari RBAC hanya karena tidak lewat gateway.
Password, kunci keystore, dan secret lain tidak pernah boleh di-hardcode di kode atau commit ke repository. Pola yang benar:
pc.setPassword(System.getenv("MITRA_PASSWORD"));Di produksi, gunakan tool manajemen secret (Vault, OpenBao, atau secret manager cloud) agar secret bisa dirotasi tanpa redeploy:
App start
-> Vault login (menggunakan identitas app / token)
-> Baca MITRA_PASSWORD dan kunci keystore
-> Injeksi ke memori proses (bukan disk)
-> Aplikasi berjalan dengan secret di memoriRotasi jadi aman: ganti nilai di Vault, aplikasi mengambil versi baru tanpa restart. Detail lengkapnya ada di series learn-secret-management-vault — di sini prinsipnya: secret keluar dari kode, hidup di tempat terkontrol.
Inti yang harus dibawa pulang:
Di episode 17 selanjutnya kita akan membahas secure coding & API security testing — serangan XXE, XML Signature Wrapping, schema bypass, dan replay, lalu pengujian dengan SoapUI Security, Burp/ZAP untuk SOAP/XML, serta checklist pengamanan produksi. Sampai jumpa di episode 17!