Okta Tokenlarını Anlamak: Kimlik Doğrulama ve Yetkilendirmede Derinlemesine Bir Bakış
Okta, modern kimlik ve erişim yönetimi (IAM) çözümlerinin önde gelen sağlayıcılarından biridir. Uygulama ve API güvenliğinde temel taş olan Okta tokenları, kullanıcı kimliklerini doğrulamak ve erişim yetkilerini belirlemek için kritik bir rol oynar. Bu makale, Okta ekosistemindeki Access Token, ID Token ve Refresh Token gibi farklı token türlerini, çalışma prensiplerini ve güvenlik uygulamalarını detaylıca inceleyecektir.
Okta ve Kimlik Yönetimi Nedir?
Günümüzün dijital dünyasında, kullanıcıların ve sistemlerin kimliğini güvenli bir şekilde doğrulamak ve kaynaklara erişimlerini yönetmek, her kuruluş için kritik bir öneme sahiptir. Okta, bu karmaşık süreci basitleştiren ve güvenliğini artıran bir platform olarak öne çıkar.
Kimlik ve Erişim Yönetimi (IAM) Nedir?
Kimlik ve Erişim Yönetimi (IAM), doğru kişilerin doğru kaynaklara doğru zamanda ve doğru nedenlerle erişmesini sağlayan güvenlik çerçevelerini ve teknolojilerini kapsar. Bu, kullanıcıların kimliklerini doğrulama, yetkilendirme ve bu süreçleri yönetme disiplinidir. IAM çözümleri, kullanıcıların kimliklerini merkezi bir noktadan yöneterek, güvenlik politikalarını uygulamayı ve uyumluluk gereksinimlerini karşılamayı kolaylaştırır.
Okta’nın IAM’deki Rolü
Okta, bulut tabanlı bir IAM sağlayıcısı olarak, şirketlerin çalışanları, müşterileri ve iş ortakları için güvenli ve sorunsuz kimlik deneyimleri sunmasına yardımcı olur. Tek Oturum Açma (SSO), Çok Faktörlü Kimlik Doğrulama (MFA), API Erişimi Yönetimi ve Kullanıcı Yaşam Döngüsü Yönetimi gibi temel özellikleri sayesinde Okta, kullanıcıların farklı uygulamalara tek bir kimlik bilgisi setiyle erişmesini sağlar. Bu, hem kullanıcı deneyimini iyileştirir hem de IT yöneticilerinin iş yükünü azaltır.
Modern Uygulama Mimarilerinde Tokenların Önemi
Mikroservisler, API’ler ve bulut tabanlı uygulamaların yaygınlaşmasıyla birlikte, geleneksel oturum yönetimi yöntemleri yetersiz kalmaya başlamıştır. Tokenlar, bu modern mimarilerde kimlik doğrulama ve yetkilendirme için standart bir mekanizma haline gelmiştir. Okta tokenları, kullanıcının kimliğini ve yetkilerini taşıyan, kriptografik olarak imzalanmış küçük veri parçalarıdır. Bu tokenlar sayesinde, uygulamalar ve API’ler, kullanıcının kimliğini her istekte yeniden doğrulamak zorunda kalmadan güvenli bir şekilde iletişim kurabilir.
Okta Token Türleri: Genel Bakış
Okta, kimlik doğrulama ve yetkilendirme süreçlerinde üç ana token türünü kullanır: Access Token, ID Token ve Refresh Token. Her birinin belirli bir amacı ve kullanım alanı vardır.
Access Token (Erişim Tokenı)
Access Token, bir kullanıcının belirli bir kaynağa (örneğin bir API’ye) erişmek için sahip olduğu yetkiyi temsil eder. Genellikle kısa ömürlüdür ve OAuth 2.0 yetkilendirme çerçevesinin temelini oluşturur. API’lere yapılan isteklerde yetkilendirme başlığında gönderilir.
ID Token (Kimlik Tokenı)
ID Token, kullanıcının kimliğini doğrulayan ve kullanıcı hakkında temel bilgileri (ad, e-posta gibi) içeren bir token’dır. OpenID Connect (OIDC) protokolünün bir parçasıdır ve kullanıcının kimliğini güvenli bir şekilde uygulamaya iletmek için kullanılır. Uygulama, bu token’ı doğrulayarak kullanıcının kimliğinden emin olur.
Refresh Token (Yenileme Tokenı)
Refresh Token, Access Token’ın süresi dolduğunda yeni bir Access Token (ve potansiyel olarak yeni bir ID Token) almak için kullanılır. Uzun ömürlüdür ve genellikle daha güvenli bir şekilde saklanması gerekir. Kullanıcının tekrar kimlik doğrulaması yapmasına gerek kalmadan oturumun devamlılığını sağlar.
Tokenların Yaşam Döngüsü
Tokenların yaşam döngüsü, bir kullanıcının kimlik doğrulama sürecinden geçmesiyle başlar. Kullanıcı Okta’da kimlik doğrulamasını başarıyla tamamladığında, Okta genellikle bir ID Token, bir Access Token ve bir Refresh Token verir. Access Token ve ID Token kısa bir süre sonra sona ererken, Refresh Token daha uzun süre geçerli kalır ve kullanıcının oturumunu yenilemek için kullanılır. Bu mekanizma, hem güvenlik hem de kullanıcı deneyimi açısından önemlidir.
Access Tokenlar: Yetkilendirmenin Kalbi
Access Tokenlar, Okta ekosisteminde yetkilendirme mekanizmasının temelini oluşturur. Bir kullanıcının veya istemcinin belirli bir kaynağa erişim yetkisine sahip olduğunu kanıtlar.
Yapısı ve İçeriği (JWT Formatı)
Okta Access Tokenları genellikle JSON Web Token (JWT) formatındadır. Bir JWT üç ana bölümden oluşur: Başlık (Header), Yük (Payload) ve İmza (Signature). Bu bölümler noktalarla ayrılır ve Base64Url ile kodlanır.
- Başlık (Header): Token türünü (JWT) ve kullanılan imzalama algoritmasını (örneğin, HS256 veya RS256) içerir.
- Yük (Payload): Token’ın asıl verilerini, yani “claim”leri içerir. Bu claim’ler, token’ın kime verildiği (
sub– subject), kim tarafından verildiği (iss– issuer), ne zaman verildiği (iat– issued at), ne zamana kadar geçerli olduğu (exp– expiration) ve hangi kaynaklara erişim yetkisi verdiği (scope) gibi bilgileri barındırır. - İmza (Signature): Başlık ve yükün bir sır anahtarı veya özel bir anahtar kullanılarak şifrelenmesiyle oluşturulur. Bu imza, token’ın bütünlüğünü ve kimliğini doğrulamak için kullanılır; yani token’ın yolda değiştirilmediğini garanti eder.
Örnek bir JWT (kodlanmış):
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Bu token'ı jwt.io gibi bir araçla çözdüğünüzde içeriğini görebilirsiniz.
Kullanım Alanları ve Amaçları
Access Token'ın temel amacı, bir kullanıcının veya istemcinin belirli bir API'ye veya kaynağa erişim yetkisini kanıtlamaktır. Örneğin, bir mobil uygulama kullanıcısı, Okta'da kimlik doğrulamasından geçtikten sonra aldığı Access Token'ı, arka uç API'lerine yaptığı her istekte "Authorization" başlığında (Bearer [Access Token] şeklinde) gönderir. API, bu token'ı doğrulayarak isteğin yetkili bir kullanıcıdan geldiğini anlar ve isteği işler.
Geçerlilik Süresi ve Yenileme İhtiyacı
Access Tokenlar genellikle kısa ömürlüdür (örneğin, 5 dakika ila 1 saat). Bu kısa ömür, token çalınması durumunda potansiyel zararı minimize etmek için bir güvenlik önlemidir. Süresi dolan bir Access Token ile yapılan istekler reddedilir. Bu durumda, uygulamanın yeni bir Access Token almak için bir Refresh Token kullanması gerekir.
Örnek Bir Access Token (JWT Decode)
Okta'dan alınan gerçek bir Access Token'ı çözdüğünüzde, aşağıdaki gibi bir yapı görebilirsiniz (payload kısmı):
{
"ver": 1,
"jti": "AT.abcdef12345...",
"iss": "https://{yourOktaDomain}/oauth2/default",
"aud": "api://default",
"cid": "0oa2x...",
"uid": "00u2x...",
"scp": ["openid", "profile", "email"],
"exp": 1678886400,
"iat": 1678882800,
"sub": "user@example.com"
}
iss: Token'ı veren Okta yetkilendirme sunucusu.aud: Token'ın hedef kitlesi (genellikle API'nizin kimliği).exp: Token'ın sona erme zamanı (Unix timestamp).sub: Token'ın konusu (genellikle kullanıcının benzersiz kimliği veya e-postası).scp: Token'ın kapsadığı yetki alanları (scopes).
ID Tokenlar: Kimlik Bilgilerinin Taşıyıcısı
ID Tokenlar, kullanıcının kimliğini doğrulamak ve temel kullanıcı bilgilerini güvenli bir şekilde uygulamaya iletmek için kullanılır. OpenID Connect (OIDC) protokolünün ayrılmaz bir parçasıdır.
Yapısı ve İçeriği (Kullanıcı Bilgileri)
Access Tokenlar gibi, ID Tokenlar da genellikle JWT formatındadır. Ancak içerikleri (payload) farklıdır. ID Token'ın payload'ı, kullanıcının kimliğiyle ilgili standart ve özel claim'leri içerir.
- Standart Claim'ler:
sub(kullanıcının benzersiz kimliği),name(tam adı),given_name(adı),family_name(soyadı),email(e-posta adresi),picture(profil resmi URL'si) gibi bilgileri içerir. - OIDC Özel Claim'leri:
iss(veren),aud(hedef kitle),exp(sona erme zamanı),iat(verilme zamanı) gibi OIDC standartlarına uygun claim'ler de bulunur.
Kullanım Alanları (Kullanıcı Kimliğini Doğrulama)
ID Token'ın birincil kullanım alanı, uygulamanın kullanıcının kimliğini doğrulamasıdır. Bir kullanıcı Okta'da oturum açtığında, uygulama bir ID Token alır. Uygulama, bu token'ın imzasını doğrulayarak ve iss, aud, exp gibi claim'leri kontrol ederek token'ın geçerliliğinden ve kullanıcının kimliğinden emin olur. Bu sayede uygulama, kullanıcı arayüzünde kullanıcının adını görüntüleyebilir veya kullanıcıya özel içerik sunabilir.
ID Token Doğrulama Mekanizmaları
Bir uygulamanın bir ID Token'ı doğru bir şekilde doğrulaması hayati önem taşır. Doğrulama adımları şunları içerir:
- İmza Doğrulaması: Token'ın, Okta'nın herkese açık anahtarı kullanılarak doğru şekilde imzalandığını kontrol etmek. Bu, token'ın yetkili bir kaynak tarafından verildiğini ve yolda değiştirilmediğini garanti eder.
- Issuer (Veren) Doğrulaması:
issclaim'inin beklenen Okta yetkilendirme sunucusu URL'si ile eşleştiğini kontrol etmek. - Audience (Hedef Kitle) Doğrulaması:
audclaim'inin uygulamanın kendi istemci kimliği ile eşleştiğini kontrol etmek. - Expiration (Sona Erme) Doğrulaması:
expclaim'inin henüz geçmediğini kontrol etmek. - Nonce Doğrulaması (isteğe bağlı ama önerilir): CSRF saldırılarına karşı koruma sağlamak için, kimlik doğrulama isteğinde gönderilen bir
noncedeğerinin ID Token'dakinonceclaim'i ile eşleştiğini kontrol etmek.
Örnek Bir ID Token (JWT Decode)
Okta'dan alınan bir ID Token'ı çözdüğünüzde, payload kısmı şöyle görünebilir:
{
"iss": "https://{yourOktaDomain}/oauth2/default",
"aud": "0oa2x...",
"exp": 1678886400,
"iat": 1678882800,
"auth_time": 1678882750,
"sub": "00u2x...",
"name": "John Doe",
"given_name": "John",
"family_name": "Doe",
"email": "john.doe@example.com",
"locale": "en-US",
"preferred_username": "john.doe@example.com"
}
sub: Kullanıcının Okta'daki benzersiz kimliği.name,given_name,family_name,email: Kullanıcının profil bilgileri.
Refresh Tokenlar: Sürekli Oturum Sağlama
Refresh Tokenlar, kullanıcı deneyimini kesintiye uğratmadan uzun süreli oturumlar sağlamak için tasarlanmıştır. Access Tokenların kısa ömürlü olması nedeniyle, Refresh Tokenlar yeni Access Tokenlar almak için kritik bir rol oynar.
Amacı ve Güvenlik Önlemleri
Refresh Token'ın temel amacı, Access Token'ın süresi dolduğunda kullanıcının tekrar kimlik doğrulama yapmasına gerek kalmadan yeni bir Access Token (ve isteğe bağlı olarak yeni bir ID Token) almaktır. Bu, kullanıcıların uygulamaları kesintisiz kullanmaya devam etmesini sağlar. Ancak, Refresh Tokenlar uzun ömürlü olduğu için, çalınmaları durumunda ciddi güvenlik riskleri taşıyabilirler. Bu nedenle, Refresh Tokenların çok daha güvenli bir şekilde saklanması ve yönetilmesi gerekir.
Okta, Refresh Tokenların güvenliğini artırmak için çeşitli önlemler sunar:
- Tek Kullanımlık Refresh Tokenlar (One-Time Use): Her kullanımda yeni bir Refresh Token verilir ve eski token geçersiz kılınır. Bu, çalınan bir Refresh Token'ın yalnızca bir kez kullanılmasına izin verir.
- Token İptali: Okta API'leri aracılığıyla Refresh Tokenlar manuel olarak veya belirli güvenlik olaylarında (örneğin, şifre değişikliği) otomatik olarak iptal edilebilir.
- Kapsam Kısıtlaması: Refresh Tokenlar, belirli yetki alanlarıyla (scopes) sınırlanabilir, böylece yalnızca belirli API'lere erişim için kullanılabilirler.
Refresh Token Kullanım Akışı
Refresh Token kullanım akışı genellikle şu adımları içerir:
- Kullanıcı Okta'da kimlik doğrulamasını tamamlar ve uygulama bir Access Token, ID Token ve Refresh Token alır.
- Uygulama, Access Token'ı kullanarak API istekleri yapar.
- Access Token'ın süresi dolduğunda, API istekleri reddedilmeye başlar.
- Uygulama, Refresh Token'ı kullanarak Okta'ya yeni bir Access Token (ve isteğe bağlı olarak yeni bir ID Token) talebinde bulunur. Bu istek genellikle bir POST isteği olarak
/oauth2/default/v1/tokenendpoint'ine yapılır. - Okta, Refresh Token'ı doğrular ve geçerliyse yeni bir Access Token (ve ID Token) verir.
- Uygulama, yeni Access Token'ı kullanarak API isteklerine devam eder.
Örnek bir Refresh Token isteği (pseudo kod):
POST /oauth2/default/v1/token HTTP/1.1
Host: {yourOktaDomain}
Content-Type: application/x-www-form-urlencoded
grant_type=refresh_token&
client_id={yourClientId}&
client_secret={yourClientSecret}&
refresh_token={yourRefreshToken}
Refresh Tokenların Saklanması ve Yönetimi
Refresh Tokenlar, uzun ömürlü oldukları için Access Tokenlara göre daha hassas kabul edilir. Bu nedenle, istemci tarafında (tarayıcı veya mobil uygulama) güvenli bir şekilde saklanmaları kritik öneme sahiptir:
- Sunucu Tarafında Saklama: Geleneksel web uygulamalarında, Refresh Tokenlar genellikle sunucu tarafında güvenli, şifrelenmiş bir veritabanında saklanır.
- Mobil Uygulamalarda: Cihazın güvenli depolama alanları (örneğin, iOS Keychain, Android Keystore) kullanılmalıdır.
- Tek Sayfalı Uygulamalarda (SPA): Refresh Tokenların tarayıcıda doğrudan saklanması (localStorage veya sessionStorage gibi) önerilmez. Bunun yerine, Refresh Token'ı HTTP-only, secure çerezlerde saklamak veya Backend-for-Frontend (BFF) mimarisi kullanmak daha güvenli yaklaşımlardır.
Token Akışları ve Kullanım Senaryoları
Okta tokenları, farklı uygulama türleri ve güvenlik gereksinimleri için çeşitli OAuth 2.0 akışları aracılığıyla elde edilir. Bu akışlar, tokenların güvenli bir şekilde nasıl alındığını ve kullanıldığını belirler.
Authorization Code Flow (Yetkilendirme Kodu Akışı)
Bu, web uygulamaları ve mobil/masaüstü uygulamaları için önerilen en güvenli akıştır. Kullanıcı, Okta'da kimlik doğrulamasını tamamladıktan sonra, Okta uygulamaya kısa ömürlü bir yetkilendirme kodu gönderir. Uygulama bu kodu, kendi gizli anahtarıyla birlikte Okta'ya göndererek Access Token, ID Token ve Refresh Token'ı alır. Kodun doğrudan tarayıcıda değil, arka uç sunucusunda işlenmesi, tokenların tarayıcıdan sızma riskini azaltır.
Implicit Flow (Örtülü Akış)
Implicit Flow, Access Token ve ID Token'ın doğrudan tarayıcıya yönlendirme URL'si üzerinden döndürüldüğü bir akıştı. Geçmişte tek sayfalı uygulamalar (SPA) için kullanılıyordu. Ancak, güvenlik açıkları (tokenların URL'de görünür olması, tarayıcı geçmişinde kalması) nedeniyle artık önerilmemektedir ve çoğu OIDC sağlayıcısı tarafından kullanımdan kaldırılmıştır. Yerine Authorization Code Flow with PKCE (Proof Key for Code Exchange) önerilmektedir.
Client Credentials Flow (İstemci Kimlik Bilgileri Akışı)
Bu akış, kullanıcı bağlamı olmadan, doğrudan bir uygulamanın (istemcinin) kendi kimlik bilgilerini kullanarak bir API'ye erişim tokenı alması gerektiğinde kullanılır. Genellikle sunucudan sunucuya iletişimde veya arka plan servislerinde kullanılır. Bir kullanıcı adına işlem yapılmaz, uygulama kendi adına yetkilendirilir.
Single Page Application (SPA) ve Mobil Uygulama Akışları
Modern SPA'lar ve mobil uygulamalar için en güvenli akış, Authorization Code Flow with PKCE'dir. Bu akış, istemci gizli anahtarı saklayamayan kamu istemcileri (public clients) için tasarlanmıştır. PKCE, yetkilendirme kodu çalınsa bile, kötü niyetli bir istemcinin tokenları almasını engelleyen ek bir güvenlik katmanı sağlar. Okta SDK'ları ve kütüphaneleri, bu akışı uygulamayı kolaylaştırır.
Güvenlik En İyi Uygulamaları ve Dikkat Edilmesi Gerekenler
Okta tokenlarını kullanırken güvenliği en üst düzeyde tutmak için belirli en iyi uygulamalara uymak önemlidir.
Token Depolama Güvenliği
- Access Tokenlar: Genellikle kısa ömürlü oldukları için tarayıcının belleğinde (memory) veya güvenli HTTP-only çerezlerde saklanabilirler. localStorage veya sessionStorage'da saklamak XSS saldırılarına karşı savunmasızlık yaratabilir.
- Refresh Tokenlar: Uzun ömürlü oldukları için en hassas tokenlardır. Tarayıcıda asla localStorage veya sessionStorage'da saklanmamalıdır. HTTP-only, secure çerezler veya Backend-for-Frontend (BFF) mimarisi gibi sunucu tarafı çözümler tercih edilmelidir. Mobil uygulamalarda ise cihazın güvenli depolama mekanizmaları kullanılmalıdır.
Token Geçerlilik Süreleri ve Yönetimi
Access Tokenların kısa ömürlü olması güvenlik açısından faydalıdır. Süreleri dolduğunda, Refresh Tokenlar kullanılarak yeni tokenlar alınmalıdır. Okta'nın token ömürlerini ve Refresh Token politikalarını doğru bir şekilde yapılandırmak, hem güvenlik hem de kullanıcı deneyimi dengesini sağlamak için önemlidir.
Token Doğrulama ve İptali
- Her İstemci Tarafından Doğrulama: Uygulamalar, aldıkları ID Token ve Access Tokenları her zaman doğrulamalıdır.
- API Tarafından Doğrulama: API'ler, gelen her Access Token'ı doğrulamalıdır. Okta, token doğrulama için özel endpoint'ler (
/introspect) veya JWT doğrulama kütüphaneleri sunar. - Token İptali: Kullanıcı oturumunu kapattığında veya şifresini değiştirdiğinde ilgili Refresh Token ve Access Tokenlar Okta API'leri aracılığıyla iptal edilmelidir. Bu, çalınan tokenların yetkisiz erişim sağlamasını engeller.
Cross-Site Scripting (XSS) ve Cross-Site Request Forgery (CSRF) Koruması
- XSS Koruması: Tokenların localStorage/sessionStorage'da saklanmasından kaçınmak ve HTTP-only çerezler kullanmak, XSS saldırılarının tokenları çalmasını zorlaştırır.
- CSRF Koruması: Authorization Code Flow'da
stateparametresini ve OIDC'denonceparametresini kullanmak, CSRF saldırılarına karşı koruma sağlar.
Sonuç
Okta tokenları, modern kimlik doğrulama ve yetkilendirme süreçlerinin temelini oluşturur. Access Tokenlar, ID Tokenlar ve Refresh Tokenlar, her biri belirli bir amaca hizmet ederek güvenli ve kesintisiz kullanıcı deneyimleri sağlar. Bu tokenların yapısını, kullanım alanlarını ve ilgili güvenlik en iyi uygulamalarını anlamak, geliştiricilerin ve güvenlik uzmanlarının sağlam, ölçeklenebilir ve güvenli uygulamalar inşa etmeleri için kritik öneme sahiptir. Okta'nın sağladığı bu güçlü mekanizmalar sayesinde, kimlik yönetimi karmaşıklığı azalırken, güvenlik standartları yükselmektedir.
Sıkça Sorulan Sorular (SSS)
Access Token ile ID Token arasındaki fark nedir?
Access Token, bir kullanıcının belirli bir API'ye veya kaynağa erişim yetkisini temsil eder ve yetkilendirme için kullanılır. ID Token ise kullanıcının kimliğini doğrular ve kullanıcı hakkında temel bilgileri (ad, e-posta vb.) içerir. ID Token kimlik
