RFC 7521 OAuth Assertion Framework, OAuth 2.0 sistemlerinde assertion adı verilen güvenlik ifadelerinin yetkilendirme izni veya istemci kimlik doğrulama yöntemi olarak kullanılmasını açıklayan temel standarttır. Bu yapı özellikle servisler arası iletişimde, kurumsal kimlik sistemlerinde ve kullanıcının doğrudan sürece katılmadığı senaryolarda önem kazanır.
RFC 7521 OAuth Assertion Framework, istemci sırrını her işlemde doğrudan göndermek yerine imzalanmış bir assertion kullanılmasına olanak tanır. Ancak assertion’ın imzası, hedef kitlesi, geçerlilik süresi ve tekrar kullanımı doğru denetlenmezse ciddi güvenlik açıkları ortaya çıkabilir.
İçindekiler
RFC 7521 OAuth Assertion Framework Nedir?
RFC 7521 OAuth Assertion Framework, assertion’ların OAuth 2.0 token endpoint’ine nasıl taşınacağını ve yetkilendirme sunucusu tarafından nasıl işleneceğini tanımlar. Assertion; bir özne, istemci veya güvenlik ilişkisi hakkında doğrulanabilir bilgiler taşıyan imzalı veri paketidir.
Standart tek başına belirli bir assertion biçimi belirlemez. Bunun yerine genel mesaj akışlarını ve işleme kurallarını oluşturur. JWT tabanlı uygulamalar RFC 7523, SAML tabanlı uygulamalar ise RFC 7522 gibi tamamlayıcı profilleri kullanır.
RFC 7521 kapsamında assertion iki farklı amaçla kullanılabilir. Birincisi, erişim belirteci almak için yetkilendirme izni olarak kullanılmasıdır. İkincisi ise istemcinin token endpoint’ine kimliğini kanıtlamasıdır. Bu iki kullanım birlikte uygulanabileceği gibi birbirinden bağımsız da kullanılabilir.
RFC 7521 OAuth Assertion Framework Nasıl Çalışır?
RFC 7521 OAuth Assertion Framework akışında istemci önce güvenilir bir token servisinden assertion alabilir veya gerekli anahtar malzemesine sahipse assertion’ı kendisi oluşturabilir. Hazırlanan assertion daha sonra OAuth yetkilendirme sunucusunun token endpoint’ine gönderilir.
Yetkilendirme sunucusu assertion içindeki issuer, subject, audience, oluşturulma zamanı ve sona erme zamanı gibi bilgileri denetler. Dijital imza veya mesaj doğrulama kodu geçerli bulunursa istek işleme alınır. Kontroller başarısız olursa erişim belirteci oluşturulmaz.
Assertion bir yetkilendirme izni olarak kullanılıyorsa istekte grant_type ve assertion parametreleri bulunur. İstemci doğrulaması için kullanılıyorsa client_assertion_type ve client_assertion parametreleri gönderilir.
POST /token HTTP/1.1
Host: authorization.example.com
Content-Type: application/x-www-form-urlencoded
grant_type=assertion-profile-type&
assertion=SIGNED_ASSERTION_VALUE
RFC 7521 OAuth Assertion Framework İçin 10 Kritik Kontrol
1. Token Endpoint Üzerinde TLS Zorunlu Olmalıdır
Assertion ve erişim belirteci gibi hassas veriler yalnızca HTTPS üzerinden taşınmalıdır. Token endpoint’inin düz HTTP bağlantılarını kabul etmesi, assertion’ın ağ trafiğini izleyen kişiler tarafından ele geçirilmesine neden olabilir. Sunucu geçersiz veya süresi dolmuş TLS sertifikalarını da kabul etmemelidir.
2. Assertion İmzası Mutlaka Doğrulanmalıdır
Assertion’ın dijital imzası veya mesaj doğrulama kodu kontrol edilmeden içindeki bilgilere güvenilmemelidir. Doğrulama sırasında yalnızca izin verilen algoritmalar kullanılmalıdır. Algoritma seçiminin assertion tarafından kontrol edilmesine izin vermek, algoritma karışıklığı saldırılarına yol açabilir.
3. Issuer Bilgisi Güvenilir Kaynakla Eşleşmelidir
Issuer, assertion’ı oluşturan tarafı tanımlar. Yetkilendirme sunucusu bu değeri kayıtlı ve güvenilir issuer listesiyle karşılaştırmalıdır. Bilinmeyen bir issuer tarafından oluşturulan assertion, imzası teknik olarak doğrulansa bile kabul edilmemelidir.
4. Subject ve Client ID Tutarlılığı Denetlenmelidir
Assertion istemci doğrulaması için kullanılıyorsa subject değeri doğru OAuth istemcisini göstermelidir. İstekte ayrıca client_id bulunuyorsa bu değer assertion içindeki istemci kimliğiyle aynı olmalıdır. Eşleşmeyen değerler invalid_client hatasıyla reddedilmelidir.
5. Audience Kontrolü Kesin Olarak Yapılmalıdır
Audience alanı assertion’ın hangi sunucu için üretildiğini gösterir. Bu değer çoğunlukla token endpoint adresini veya yetkilendirme sunucusunu tanımlar. Audience kontrolünün atlanması, başka bir hizmet için oluşturulan assertion’ın yanlış sunucuda kullanılmasına neden olabilir.
6. Geçerlilik Süresi Kısa Tutulmalıdır
Issued At ve Expires At değerleri kontrol edilmelidir. Süresi dolmuş assertion’lar kabul edilmemeli, çok ileri bir sona erme zamanı içeren talepler reddedilmelidir. Saat farklılıkları için küçük ve sınırlandırılmış bir tolerans uygulanabilir. Uzun süre geçerli assertion’lar saldırganlara daha geniş kullanım fırsatı verir.
7. Assertion ID ile Replay Saldırıları Engellenmelidir
RFC 7521 OAuth Assertion Framework uygulamalarında her assertion için benzersiz bir kimlik kullanılmalıdır. Sunucu daha önce işlenen kimlikleri assertion’ın geçerlilik süresi boyunca saklayabilir. Aynı assertion ikinci kez gönderildiğinde istek reddedilmelidir. Bu kontrol, ele geçirilen bir assertion’ın tekrar kullanılmasını zorlaştırır.
8. Tek Bir İstemci Doğrulama Yöntemi Kabul Edilmelidir
Aynı istekte hem client secret hem de client assertion gibi birden fazla istemci doğrulama yöntemi gönderilirse istek reddedilmelidir. Farklı yöntemlerin birlikte kabul edilmesi, sunucu tarafındaki doğrulama sırasının kötüye kullanılmasına neden olabilir.
9. Scope ve Erişim Belirteci Süresi Sınırlandırılmalıdır
İstenen scope, assertion’a daha önce verilmiş yetkiden geniş olmamalıdır. Yetkilendirme sunucusu gereksiz yetkileri kaldırmalı ve en az ayrıcalık ilkesini uygulamalıdır. Üretilen erişim belirtecinin ömrü assertion’ın geçerlilik süresini önemli ölçüde aşmamalıdır.
10. Hatalar Güvenli Şekilde Kaydedilmelidir
Geçersiz yetkilendirme assertion’ları için invalid_grant, geçersiz istemci assertion’ları için ise invalid_client kullanılmalıdır. Log kayıtlarında assertion’ın tamamı, erişim belirteci veya özel anahtar bilgisi tutulmamalıdır. Güvenlik kayıtları olayın nedenini gösterecek kadar ayrıntılı ancak hassas veriyi açığa çıkarmayacak kadar sınırlı olmalıdır.
Assertion Grant ve İstemci Doğrulama Arasındaki Fark
RFC 7521 OAuth Assertion Framework, assertion grant ile istemci doğrulamasını farklı işlemler olarak ele alır. Assertion grant, erişim belirteci talebinin hangi yetkiye dayandığını açıklar. İstemci assertion’ı ise isteği gönderen uygulamanın kimliğini doğrular.
| Özellik | Assertion Grant | İstemci Doğrulama |
|---|---|---|
| Temel amaç | Yetkilendirme izni sunmak | İstemcinin kimliğini kanıtlamak |
| Ana parametre | assertion | client_assertion |
| Tür parametresi | grant_type | client_assertion_type |
| Başarısızlık hatası | invalid_grant | invalid_client |
Bu ayrım uygulama kodunda açık şekilde korunmalıdır. Assertion grant kullanılması, istemcinin otomatik olarak doğrulandığı anlamına gelmez. Yetkilendirme sunucusunun politikasına göre ayrıca istemci doğrulaması gerekebilir.
RFC 7521 OAuth Assertion Framework Kullanım Alanları
RFC 7521 OAuth Assertion Framework, özellikle arka uç servislerinin birbiriyle güvenli iletişim kurduğu yapılarda kullanılır. Kullanıcının tarayıcı üzerinden giriş yapmadığı makineden makineye iletişim senaryolarında assertion tabanlı doğrulama tercih edilebilir.
- Kurumsal kimlik sağlayıcıları ile OAuth sunucuları arasındaki entegrasyonlar
- Mikro servislerin merkezi yetkilendirme sunucusuna bağlanması
- Bulut servisleri arasında güvenli kimlik aktarımı
- JWT veya SAML tabanlı istemci doğrulama sistemleri
- Kullanıcının doğrudan bulunmadığı arka plan işlemleri
Bu standardın teknik ayrıntıları için RFC Editor üzerindeki RFC 7521 belgesini inceleyebilirsiniz. Diğer teknoloji ve güvenlik rehberlerine Tekno Türkiye ana sayfasından ulaşabilirsiniz.
RFC 7521 OAuth Assertion Framework Uygulama Listesi
RFC 7521 OAuth Assertion Framework kurulumu tamamlandıktan sonra aşağıdaki maddeler test ortamında doğrulanmalıdır:
- Token endpoint yalnızca güncel TLS yapılandırmasıyla çalışıyor mu?
- İzin verilen imza algoritmaları sunucu tarafında sınırlandırılmış mı?
- Issuer değeri kayıtlı güven ilişkisiyle karşılaştırılıyor mu?
- Subject ve client ID değerleri tutarlı mı?
- Audience değeri doğru token endpoint’i gösteriyor mu?
- Issued At ve Expires At alanları denetleniyor mu?
- Aynı assertion’ın tekrar kullanımı engelleniyor mu?
- Scope değeri önceden verilen yetkiyi aşabiliyor mu?
- Bir istekte birden fazla istemci doğrulama yöntemi reddediliyor mu?
- Log kayıtlarında hassas assertion verileri gizleniyor mu?
Sık Sorulan Sorular
RFC 7521 OAuth Assertion Framework bir JWT standardı mıdır?
Hayır. RFC 7521 genel bir assertion çerçevesidir ve belirli bir veri biçimine bağlı değildir. JWT ile uygulanacak somut profil RFC 7523 tarafından tanımlanır. SAML tabanlı uygulamalar için RFC 7522 kullanılır.
Assertion, access token ile aynı şey midir?
Hayır. Assertion, yetkilendirme sunucusuna kimlik veya yetki bilgisi sunmak için kullanılabilir. Access token ise başarılı doğrulama sonrasında korunan kaynaklara erişmek amacıyla oluşturulur.
Client secret yerine assertion kullanılabilir mi?
Evet. İstemci assertion’ı, istemcinin token endpoint’ine kimliğini kanıtlaması için alternatif bir yöntemdir. Bu yöntemde de imza doğrulaması, güvenilir issuer, doğru audience ve kısa geçerlilik süresi gibi güvenlik kontrolleri zorunludur.
Önemli Güvenlik Özeti
Güvenli bir yapı için yalnızca assertion’ın mevcut olması yeterli değildir. İmza, issuer, subject, audience, süre ve benzersiz kimlik kontrollerinin birlikte yapılması gerekir. Token endpoint TLS ile korunmalı, erişim kapsamı sınırlandırılmalı ve tekrar kullanım denemeleri reddedilmelidir.
Ayrıca istemci doğrulaması ile yetkilendirme izni birbirine karıştırılmamalıdır. Her işlem kendi parametreleri, hata kodları ve güvenlik politikalarıyla değerlendirilmelidir.
Sonuç: RFC 7521 OAuth Assertion Framework
RFC 7521 OAuth Assertion Framework, OAuth 2.0 altyapılarında assertion tabanlı yetkilendirme ve istemci doğrulaması için ortak kurallar oluşturur. Doğru uygulandığında istemci sırlarının doğrudan taşınmasını azaltabilir ve farklı kimlik sistemleri arasında güvenli entegrasyon sağlayabilir.
Ancak güvenlik yalnızca standardı desteklemekle tamamlanmaz. TLS, imza doğrulaması, audience denetimi, kısa geçerlilik süresi, replay koruması ve kapsam sınırlandırması birlikte uygulanmalıdır. Bu kontroller düzenli olarak test edildiğinde assertion tabanlı OAuth işlemleri daha güvenilir hâle gelir.
