OpenID Connect, OAuth 2.0 üzerine inşa edilmiş ve standart yetkilendirmeye kullanıcı kimlik doğrulama katmanı ekleyen bir kimlik doğrulama protokolüdür. Access token'ın kullanıcı bilgisi olmadan kaynaklara erişim sağladığı saf OAuth 2.0'ın aksine, OpenID Connect bir ID Token — doğrulanmış profil verilerine sahip bir JWT — döndürür. OpenID Foundation, 2026'ya göre, protokol tüm büyük Identity Provider'lar — Google, Apple, Microsoft ve Auth0 — tarafından desteklenmektedir.
Önemli Noktalar
OpenID Connect (OIDC), OAuth 2.0 üzerine bir uzantı olarak inşa edilmiş açık bir kimlik doğrulama protokolüdür. OAuth 2.0'da eksik olanı — kullanıcı kimlik doğrulamasını — standartlaştırır. OAuth 2.0 “hangi uygulamanın erişimi var?” sorusunu yanıtlıyorsa, OIDC “bu kullanıcı tam olarak kim?” sorusunu yanıtlar.
Protokol bir ID Token — bir dizi talep (benzersiz özne tanımlayıcısı, e-posta, ad, avatar, yayın ve son kullanma zaman damgaları) içeren bir JSON Web Token (JWT) — kullanır. İstemci uygulaması, ID Token'ı kriptografik olarak doğrulayabilir — sunucu, RS256 veya ES256 kullanarak token'ı imzalar ve istemci, JWKS uç noktasından alınan genel anahtarla imzayı kontrol eder.
Auth0, 2025'e göre, üçüncü taraf kimlik doğrulama kullanan mobil uygulamaların %78'inden fazlası, Google Sign-In veya Sign in with Apple aracılığıyla OIDC kullanmaktadır. Bu, protokolü sosyal giriş ve kurumsal kimlik doğrulama için fiili standart haline getirmektedir.
OpenID Connect, istemci türüne bağlı olarak birkaç akış (flow) tanımlar. Mobil uygulamalar için standart, Proof Key for Code Exchange (PKCE) ile Authorization Code Flow'dur — cihazda client secret olmadan bile güvenlik sağlar.
Identity Provider (IdP), kullanıcıların kimliğini doğrulayan ve token yayınlayan bir sunucudur. OIDC ekosisteminde IdP iki temel uç nokta sağlar: kullanıcı girişi için Authorization Endpoint ve kodu token'larla değiştirmek için Token Endpoint. İstemci, bu uç noktaların adreslerini Discovery URL — standart yol /.well-known/openid-configuration — aracılığıyla keşfeder ve bu, tam sağlayıcı yapılandırmasıyla bir JSON belgesi döndürür.
Her IdP, JWKS (JSON Web Key Set) — ID Token imzasını doğrulamak için bir dizi genel anahtar — yayınlar. İstemci bu anahtarları önbelleğe alır ve sunucuya başvurmadan alınan her token'ı doğrulamak için kullanır.
Authorization Code Flow üç adımlı bir süreçtir. İlk olarak, mobil uygulama bir code verifier (43–128 karakterlik rastgele bir dize) ve hash'ini — code challenge — oluşturur. Uygulama, client_id, redirect_uri, scope (openid profile email) ve code challenge içeren bir URL ile bir tarayıcı veya WebView açar. Kullanıcı, IdP sayfasında kimlik bilgilerini girer ve izni onaylar. IdP, tarayıcıyı bir authorization code ile uygulamaya yönlendirir.
İkinci adımda, uygulama authorization code, code verifier ve client_id'yi sunucunun Token Endpoint'ine gönderir. Sunucu, code verifier'ı depolanan code challenge ile doğrular ve bir ID Token, Access Token ve isteğe bağlı olarak bir Refresh Token döndürür. Üçüncü adımda, uygulama ID Token'ı doğrular: JWKS'ye karşı imzayı doğrular, issuer (iss), audience (aud) ve son kullanma zamanını (exp) kontrol eder. Doğrulama başarılı olursa, kullanıcının kimliği doğrulanmış sayılır.
PKCE (Proof Key for Code Exchange), genel istemcilerdeki standart Authorization Code Flow'un doğasında bulunan bir güvenlik açığını ortadan kaldırır. Mobil uygulama bir client secret'ı güvenli bir şekilde depolayamadığından, authorization code'u ele geçiren bir saldırgan bunu token'larla değiştirebilir. Code verifier bu sorunu çözer: kod ele geçirilse bile, orijinal code verifier olmadan değişim imkansızdır. OAuth Security Best Practices (RFC 9700), mobil uygulamalar dahil tüm genel istemciler için PKCE'yi zorunlu kılar.
OpenID Connect, temel olarak farklı iki token döndürür: ID Token ve Access Token. ID Token her zaman bir JWT'dir ve istemci tarafından okunup doğrulanabilir. Kullanıcı bilgilerini içerir ve API erişimi için değil, kimlik doğrulama için kullanılır.
ID Token, Base64 ile kodlanmış ve noktalarla ayrılmış bir header, payload ve signature'dan oluşur. Header, alg (imza algoritması) ve kid (anahtar tanımlayıcısı) içerir. Payload, zorunlu talepleri içerir: iss (issuer), sub (subject — benzersiz kullanıcı ID'si), aud (audience — istemci tanımlayıcısı), exp (expiration), iat (issued at). İsteğe bağlı talepler arasında name, email, picture, locale bulunur.
Google'dan çözülmüş ID Token payload örneği:
{
"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, istemcinin API isteklerinde ilettiği opak bir token (isteğe bağlı dize) veya JWT'dir. ID Token'ın aksine, access token istemci tarafından okunmak üzere tasarlanmamıştır — biçimi ve içeriği yalnızca kaynak sunucu ve yetkilendirme sunucusu tarafından bilinir. Access Token'ın bir kapsamı (scope) — bir izin kısıtlaması — ve genellikle 15–60 dakika olan kısa bir ömrü vardır.
OAuth 2.0, bir uygulamanın kullanıcı kaynaklarına nasıl erişeceğini tanımlayan bir yetkilendirme çerçevesidir. OpenID Connect, bu sürece kimlik doğrulama ekleyen bir uzantıdır. Temel fark: OAuth 2.0 bir token biçimi tanımlamaz ve uygulamaya isteği tam olarak kimin yaptığını bilme yöntemi sağlamaz.
| Parametre | OAuth 2.0 | OpenID Connect |
|---|---|---|
| Amaç | Kaynaklara erişim için yetkilendirme | Kimlik doğrulama + yetkilendirme |
| Kimlik token'ı | Hayır | ID Token (JWT) |
| Kapsam (Scope) | api:read, api:write | openid, profile, email |
| UserInfo Endpoint | İsteğe bağlı | Standartlaştırılmış |
| Tek Oturum Kapatma | Hayır | OpenID Connect Session Management spesifikasyonu |
OpenID Connect, uygulamanın yalnızca kullanıcının verilerine erişmesi değil, kullanıcıyı tanımlaması gerektiğinde gereklidir. “Google ile Oturum Aç” veya “Apple ile Oturum Aç” kullanıyorsanız — bu OIDC'dir. Uygulamanız, kullanıcının kimliğini bilmeye gerek kalmadan onun adına üçüncü taraf bir API çağırıyorsa — saf OAuth 2.0 yeterlidir. Tek Oturum Açma (SSO) ile kurumsal sistemler için seçim açıktır: yalnızca OpenID Connect, çünkü standartlaştırılmış oturum kapatma ve oturum yönetimi sağlar.
OpenID Connect'i mobil uygulamaya entegre etmek, doğru kütüphaneyi seçmeyi ve akışı doğru şekilde yapılandırmayı gerektirir. Android için, kimlik bilgisi yöneticisini (AndroidX Credentials) veya AppAuth kütüphanesini kullanın. iOS için, ASWebAuthenticationSession ile AuthenticationServices çerçevesini kullanın.
Aşağıda, AppAuth-Android kütüphanesini kullanarak Authorization Code Flow'u başlatma örneği verilmiştir. Uygulama bir yetkilendirme isteği oluşturur, kullanıcı girişi için bir tarayıcı açar ve token'larla geri aramayı işler.
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)
}
}
}
Apple'ın ASWebAuthenticationSession'ı, iCloud Keychain aracılığıyla SSO desteği ile OIDC akışı için yerleşik bir tarayıcı sağlar. Oturum, yetkilendirme URL'si ile başlar ve geri arama bir completion handler aracılığıyla işlenir.
OpenID Connect için bir kütüphane seçerken, yerleşik PKCE desteğini göz önünde bulundurun: AppAuth-Android ve AppAuth-iOS, PKCE'yi varsayılan olarak destekler. Firebase Authentication, Google Sign-In, Sign in with Apple ve Microsoft için dahili olarak OIDC kullanır — geliştiricinin akışı manuel olarak uygulaması gerekmez. Özel IdP (örneğin, Keycloak veya Okta) ile kurumsal sistemler için AppAuth, yapılandırma ve hata işleme üzerinde tam kontrol ile standart seçim olmaya devam etmektedir.
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()
Sıkça Sorulan Sorular
OpenID Connect, OAuth 2.0'ın bir uzantısıdır ve kimlik doğrulama ekler. OAuth 2.0 yalnızca kaynaklara erişim için yetkilendirmeyi yönetir. OIDC, ID Token'ı (kullanıcı verileriyle JWT) tanıtır, UserInfo uç noktasını standartlaştırır ve Tek Oturum Açma ile oturum kapatma yetenekleri ekler.
Mobil uygulamalar için PKCE ile Authorization Code Flow önerilir. Bir client secret gerektirmez, authorization code'un ele geçirilmesine karşı korur ve tüm büyük Identity Provider'lar tarafından desteklenir. Implicit Flow kullanımdan kaldırılmıştır ve yeni projelerde kullanılmamalıdır.
ID Token üç adımda doğrulanır: JWKS uç noktasından genel anahtar kullanarak imza doğrulaması, taleplerin (iss, aud, exp) kontrolü ve payload'un çözülmesi. Çoğu SDK — AppAuth, MSAL, Google Sign-In — token alındığında bu doğrulamayı otomatik olarak gerçekleştirir.
openid kapsamı, bir OIDC isteğini normal bir OAuth 2.0 isteğinden ayıran zorunlu bir parametredir. Bu olmadan, sunucu bir ID Token döndürmez. Ek kapsamlar — profile, email, address — token'a hangi belirli kullanıcı taleplerinin dahil edileceğini belirler.
Teknik olarak evet, Resource Owner Password Credentials akışı aracılığıyla, ancak önerilmez. Tarayıcı akışı, kimlik bilgisi yalıtımı sağlar — uygulama kullanıcının şifresini asla görmez. Apple ve Google, hizmetleri için tarayıcı tabanlı kimlik doğrulama gerektirir.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun