OpenID Connect — adalah protokol autentikasi yang dibangun di atas OAuth 2.0, yang menambahkan lapisan verifikasi identitas pengguna ke otorisasi standar. Tidak seperti OAuth 2.0 murni, di mana access token memberikan akses ke sumber daya tanpa informasi tentang pengguna, OpenID Connect mengembalikan ID Token — JWT dengan data profil yang terverifikasi. Menurut data OpenID Foundation, 2026, protokol ini didukung oleh semua Identity Provider besar — Google, Apple, Microsoft dan Auth0.
Utama
OpenID Connect (OIDC) — adalah protokol autentikasi terbuka yang dibangun sebagai lapisan di atas OAuth 2.0. Ini menstandarisasi apa yang kurang dari OAuth 2.0: verifikasi identitas pengguna. Jika OAuth 2.0 menjawab pertanyaan “aplikasi mana yang memiliki akses?”, maka OIDC menjawab pertanyaan “siapa sebenarnya pengguna ini?”.
Protokol ini menggunakan ID Token — JSON Web Token (JWT), yang berisi sekumpulan claims: identitas unik subjek, email, nama, avatar, stempel waktu penerbitan dan kedaluwarsa. Aplikasi klien dapat memverifikasi ID Token secara kriptografis — server menandatangani token dengan RS256 atau ES256, dan klien memeriksa tanda tangan dengan kunci publik yang diperoleh melalui JWKS endpoint.
Menurut data Auth0, 2025, lebih dari 78% aplikasi mobile yang menggunakan autentikasi pihak ketiga menerapkan OIDC melalui Google Sign-In atau Sign in with Apple. Ini menjadikan protokol sebagai standar de facto untuk login sosial dan autentikasi korporat.
OpenID Connect mendefinisikan beberapa alur (flows) tergantung pada jenis klien. Untuk aplikasi mobile, standarnya adalah Authorisation Code Flow dengan Proof Key for Code Exchange (PKCE) — memberikan perlindungan bahkan tanpa client secret di perangkat.
Identity Provider (IdP) — adalah server yang melakukan autentikasi pengguna dan menerbitkan token. Dalam ekosistem OIDC, IdP menyediakan dua endpoint utama: Authorisation Endpoint untuk login pengguna dan Token Endpoint untuk menukar kode dengan token. Klien mengetahui alamat endpoint ini melalui Discovery URL — jalur standar /.well-known/openid-configuration, yang mengembalikan dokumen JSON dengan seluruh konfigurasi penyedia.
Setiap IdP mempublikasikan JWKS (JSON Web Key Set) miliknya — kumpulan kunci publik untuk memverifikasi tanda tangan ID Token. Klien menyimpan kunci-kunci ini dan menggunakannya untuk verifikasi setiap token yang diterima tanpa menghubungi server.
Authorisation Code Flow — adalah proses tiga langkah. Pertama, aplikasi mobile menghasilkan code verifier (string acak sepanjang 43–128 karakter) dan hash-nya — code challenge. Aplikasi membuka browser atau WebView dengan URL yang berisi client_id, redirect_uri, scope (openid profile email) dan code challenge. Pengguna memasukkan kredensial di halaman IdP dan menyetujui izin. IdP mengarahkan browser kembali ke aplikasi dengan authorisation code.
Pada langkah kedua, aplikasi mengirimkan authorisation code, code verifier dan client_id ke Token Endpoint server. Server memeriksa code verifier terhadap code challenge yang tersimpan dan mengembalikan ID Token, Access Token dan opsional Refresh Token. Pada langkah ketiga, aplikasi memverifikasi ID Token: memvalidasi tanda tangan melalui JWKS, memeriksa issuer (iss), audience (aud) dan waktu kedaluwarsa (exp). Jika verifikasi berhasil — pengguna dianggap terautentikasi.
PKCE (Proof Key for Code Exchange) menghilangkan kerentanan yang melekat pada Authorisation Code Flow standar di klien publik. Karena aplikasi mobile tidak dapat menyimpan client secret dengan aman, penyerang yang mencegat authorisation code dapat menukarnya dengan token. Code verifier memecahkan masalah ini: bahkan jika kode dicegat, tanpa code verifier asli, pertukaran tidak mungkin dilakukan. OAuth Security Best Practices (RFC 9700) mewajibkan PKCE untuk semua klien publik, termasuk aplikasi mobile.
OpenID Connect mengembalikan dua token yang secara fundamental berbeda: ID Token dan Access Token. ID Token — selalu JWT yang dapat dibaca dan diverifikasi secara mandiri oleh klien. Ini berisi informasi tentang pengguna dan digunakan untuk autentikasi, bukan untuk akses ke API.
ID Token terdiri dari header, payload dan signature, yang dikodekan dalam Base64 dan dipisahkan oleh titik. Header berisi alg (algoritma tanda tangan) dan kid (identitas kunci). Payload mencakup claims wajib: iss (issuer — penerbit token), sub (subject — ID unik pengguna), aud (audience — identitas klien), exp (expiration), iat (issued at). Opsional — name, email, picture, locale.
Contoh payload ID Token yang didekode dari Google:
{
"iss": "https://accounts.google.com",
"sub": "1234567890",
"aud": "my-app-123.apps.googleusercontent.com",
"exp": 1812345678,
"iat": 1812342078,
"name": "Ivan Petrov",
"email": "ivan@example.com"
}
Access Token — adalah token opak (string acak) atau JWT yang dikirimkan klien dalam permintaan API. Tidak seperti ID Token, access token tidak dimaksudkan untuk dibaca oleh klien — format dan isinya hanya diketahui oleh server sumber daya dan server otorisasi. Access Token memiliki scope — pembatasan hak akses — dan masa berlaku pendek, biasanya 15–60 menit.
OAuth 2.0 — adalah kerangka otorisasi yang mendefinisikan bagaimana aplikasi mendapatkan akses ke sumber daya pengguna. OpenID Connect — adalah lapisan yang menambahkan autentikasi ke proses ini. Perbedaan utama: OAuth 2.0 tidak mendefinisikan format token dan tidak memberikan cara bagi aplikasi untuk mengetahui siapa yang sebenarnya membuat permintaan.
| Parameter | OAuth 2.0 | OpenID Connect |
|---|---|---|
| Tujuan | Otorisasi akses ke sumber daya | Autentikasi + otorisasi |
| Token identitas | Tidak ada | ID Token (JWT) |
| Scope | api:read, api:write | openid, profile, email |
| UserInfo endpoint | Opsional | Terstandarisasi |
| Single Logout | Tidak ada | Spesifikasi OpenID Connect Session Management |
OpenID Connect diperlukan ketika aplikasi perlu mengenali pengguna, bukan hanya mendapatkan akses ke datanya. Jika Anda menggunakan “Masuk dengan Google” atau “Sign in with Apple” — ini adalah OIDC. Jika aplikasi Anda memanggil API pihak ketiga atas nama pengguna tanpa perlu mengetahui identitasnya — OAuth 2.0 murni sudah cukup. Untuk sistem korporat dengan Single Sign-On (SSO) pilihannya jelas: hanya OpenID Connect, karena menyediakan logout terstandarisasi dan manajemen sesi.
Integrasi OpenID Connect ke dalam aplikasi mobile memerlukan pemilihan pustaka yang tepat dan konfigurasi alur yang benar. Untuk Android digunakan credential manager (AndroidX Credentials) atau pustaka AppAuth. Untuk iOS — framework AuthenticationServices dengan ASWebAuthenticationSession.
Di bawah ini adalah contoh menjalankan Authorisation Code Flow menggunakan pustaka AppAuth-Android. Aplikasi membuat permintaan otorisasi, membuka browser untuk login pengguna dan memproses callback dengan token.
val authRequest = AuthorizationRequest.Builder(
serviceConfig,
clientId,
"code",
Uri.parse("com.example.app:/oauth")
)
.setScope("openid profile email")
.build()
val authService = AuthorizationService(this)
val intent = authService.getAuthorizationRequestIntent(authRequest)
startActivityForResult(intent, REQUEST_CODE)
override fun onActivityResult(
requestCode: Int,
resultCode: Int,
data: Intent?
) {
if (requestCode == REQUEST_CODE) {
val response = AuthorizationResponse.fromIntent(data)
if (response?.authorizationCode != null) {
exchangeCodeForTokens(response.authorizationCode)
}
}
}
ASWebAuthenticationSession dari Apple menyediakan browser bawaan untuk alur OIDC dengan dukungan SSO melalui iCloud Keychain. Sesi dimulai dengan URL otorisasi, dan callback diproses melalui completion handler.
Saat memilih pustaka untuk OpenID Connect, pertimbangkan dukungan PKCE bawaan: AppAuth-Android dan AppAuth-iOS mendukung PKCE secara default. Firebase Authentication menggunakan OIDC di bawah tenda untuk Google Sign-In, Sign in with Apple dan Microsoft — pengembang tidak perlu mengimplementasikan alur secara manual. Untuk sistem korporat dengan IdP sendiri (misalnya Keycloak atau Okta), AppAuth tetap menjadi pilihan standar dengan kontrol penuh atas konfigurasi dan penanganan kesalahan.
let authURL = URL("https://accounts.google.com/o/oauth2/v2/auth")!
let callbackURL = URL("com.example.app://oauth")!
let session = ASWebAuthenticationSession(
url: authURL,
callbackURLScheme: callbackURL.scheme!
) { url, error in
guard let url = url else { return }
let components = URLComponents(url: url)
let code = components?.queryItems?.first(where: { $0.name == "code" })?.value
if let code = code { exchangeCode(code) }
}
session.start()
Pertanyaan yang sering diajukan
OpenID Connect — adalah lapisan di atas OAuth 2.0 yang menambahkan autentikasi. OAuth 2.0 hanya bertanggung jawab atas otorisasi akses ke sumber daya. OIDC memperkenalkan ID Token — JWT dengan data pengguna, menstandarisasi UserInfo endpoint dan menambahkan kemampuan Single Sign-On dan logout.
Untuk aplikasi mobile, direkomendasikan Authorisation Code Flow dengan PKCE. Ini tidak memerlukan client secret, melindungi dari intersepsi authorisation code dan didukung oleh semua Identity Provider besar. Implicit Flow sudah usang dan tidak boleh digunakan di proyek baru.
ID Token diverifikasi dalam tiga langkah: validasi tanda tangan melalui kunci publik dari JWKS endpoint, pemeriksaan claims (iss, aud, exp) dan dekode payload. Sebagian besar SDK — AppAuth, MSAL, Google Sign-In — melakukan verifikasi ini secara otomatis saat menerima token.
Scope openid — adalah parameter wajib yang membedakan permintaan OIDC dari OAuth 2.0 biasa. Tanpa itu, server tidak akan mengembalikan ID Token. Scope tambahan — profile, email, address — menentukan claims spesifik mana tentang pengguna yang akan disertakan dalam token.
Secara teknis — ya, melalui alur Resource Owner Password Credentials, tetapi tidak disarankan. Alur browser memastikan isolasi kredensial — aplikasi tidak pernah melihat kata sandi pengguna. Apple dan Google mewajibkan autentikasi browser untuk layanan mereka.
Kesimpulan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga