Herkese merhaba. Bu yazıda, OAuth2 protokolünü, terminolojilerini ve OAuth2’nin farklı akışlarını göreceğiz. Bu makalenin sonuna doğru, kimlik doğrulama için OIDC çerçevesiyle birlikte OAuth2’yi kullanmayı inceleyeceğiz.
SAML, OAuth2 ve OIDC arasındaki farkları ve tek oturum açmayı anlamak istiyorsanız lütfen aşağıdaki makaleyi okuyun.
OAuth2 nedir?
OAuth2 (Açık Yetkilendirme), bir web sitesinin veya uygulamanın, bir kullanıcı adına diğer web uygulamaları tarafından barındırılan kaynaklara erişmesine izin veren bir yetkilendirme protokolüdür. OAuth2 artık endüstri standardı haline geldi. 2012’de OAuth 1.0’ın yerini aldı. OAuth2’yi kullanarak, kimlik bilgilerini almadan kullanıcılar adına kaynaklara erişmek için uygulamalar geliştirebiliriz.
OAuth2, kullanıcılar adına kaynaklara erişmek için Erişim belirteçlerini kullanır. Kullanılan belirteçler için tanımlanmış belirli bir format olmasa da JWT, OAuth2 ile en yaygın kullanılan belirteç mekanizmasıdır. Erişim belirteci, kullanıcılar adına kaynaklara erişmek için yetkilendirme bilgilerini içerir.
Jetonların, o jetona verilen erişim miktarını sınırlamak için kapsamları vardır. Aşağıda gösterildiği gibi örnek bir erişim belirtecine bakalım.
Yukarıdaki belirteçte, bu belirtecin kapsamı bu client_id’ye READ olarak sağlanır. YAZMA erişimine ihtiyaç duyan bir API uç noktasını çağırmak için bu belirteci kullanırsak, bu API çağrısı başarısız olur.
OAuth2 Terminolojileri
Kaynak Sahibi : Bir uygulamaya kendi adına hesabına erişme yetkisi veren kullanıcı. Örn:Bitbucket uygulamasının önemli kullanıcıların Gmail’den iletişim kurmasına izin verin. Kullanıcı, uygulamaya erişimden bahsedecektir. Kullanıcı, kullanıcının Google hesabına erişmek için yalnızca bitbucket için Okuma Erişimine izin verir.
İstemci : Bu, kullanıcı ile karıştırılmamalıdır. İstemci, kullanıcı adına bir kullanıcı hesabına erişmek isteyen bir web veya mobil uygulamadır. Örn: Bitbucket uygulaması, kullanıcıların kişilerini Gmail’den içe aktarmak istiyor. Bitbucket uygulaması, kullanıcıyı google giriş sayfasına götürecektir. Kullanıcı, oturum açmak ve kapsamı sağlamak için google kimlik bilgilerini girecektir.
Kaynak Sunucusu : Korunan kullanıcı hesaplarını barındıran kaynak sunucusu. Örn: Google Haritalar, Youtube, Google Cloud, Gmail
Yetkilendirme Sunucusu : Yetkilendirme sunucusu, kullanıcının kimliğini doğrular ve ardından istemci uygulamasına erişim belirteçleri verir . örneğin: Google Kimlik Doğrulama Sunucusu, uygulamayı doğrular ve kullanıcıların Gmail’deki hesaplarına erişmek için bitbucket’e bir erişim belirteci sağlar.
OAuth2 protokolü, yetkilendirme sunucusunun, kaynak sahibinin (kullanıcı) onayını aldıktan sonra üçüncü taraf uygulamalara erişim belirteçleri vermesine olanak tanır. Bu erişim belirteçleri, kaynak tarafından sağlanan kaynaklara erişmek için Bitbucket, Slack vb. gibi üçüncü taraf uygulamalar tarafından kullanılır. sunucu.
Yeni bir uygulamaya kaydolduysanız ve Google / Facebook vb.’den kişileri içe aktarmayı kabul ettiyseniz OAuth2’yi zaten kullanmış olmalısınız. Gönderinizi veya fotoğraflarınızı Facebook / Instagram vb. üzerinde paylaşmanızı isteyen bir özellik kullanmış olabilirsiniz. Kimlik bilgilerini paylaşmadan güvenli yetki verilmiş erişim sağlayan OAuth2 protokolü OAuth2 yalnızca Yetkilendirme için kullanılır, Kimlik Doğrulama için kullanılmaz
OAuth2 Akışları
OAuth2 protokolünde birkaç farklı akış vardır. 7 ortak akış tanımladım ancak tüm akışlar yukarıda belirtilen terminolojileri kullanır.
1. Yetki Kodu Akışı
Yetkilendirme kodu akışı, OAuth2’deki en yaygın ve yaygın olarak kullanılan akıştır. Hem web hem de mobil uygulamalar, kullanıcıların bir uygulamaya kendi adlarına veri paylaşma yetkisi vermesini sağlamak için bu akışı kullanır. Örn: Bir web sitesine giriş yapıyorum ve Facebook’tan kişilerime erişmesine izin veriyorum. Facebook’ta oturum açtığımda uygulama beni Facebook oturum açma sayfasına götürecek ve ardından uygulamaya verilerime erişmesi için yetki verecek.
Süreçte aşağıdaki adımlar gerçekleştirilir:
- Uygulama, kullanıcıyı OAuth sunucusuna göndermek için bir tarayıcı açar
- Kullanıcı, yetkilendirme istemini görür ve uygulamanın isteğini onaylar
- Kullanıcı, sorgu dizesindeki bir yetkilendirme koduyla uygulamaya geri yönlendirilir
- Uygulama, bir erişim belirteci için yetkilendirme kodunu değiştirir
2. İstemci Kimlik Bilgileri Akışı
İstemci kimlik bilgileri akışı, insan müdahalesi olmadan makineden makineye iletişim için kullanılır. 2 makine iletişim kurmak isterse, istemci makine Yetkilendirme sunucusundaki bir API’yi bir istemci kimliği ve istemci sırrı ile çağıracaktır.
Kimlik bilgilerini doğruladıktan sonra, genellikle 24 saatlik bir m2m belirteci oluşturulur. İstemci makine, belirteci genellikle bir önbellekte depolar ve belirteci, belirtecin süresi dolana kadar tüm iletişim için kullanır.
Bu akışlar, ödemeler, arka plan programları, CLI ve diğer harici sistemlere bağlanma gibi arka uç sunucudan sunucuya iletişim için çok kullanışlıdır.
3. Kaynak Sahibi Parola Akışı
Kaynak Sahibi Parola Akışı, kullanıcıdan kimlik bilgilerini alan ve karşılığında bir belirteç sağlayan çok basit bir akıştır.
Bu akış tipik olarak, kullanıcının oturum açma sayfasında kullanıcı adını ve parolayı girdiği ve ardından uygulamanın tüm API çağrılarında kullanmak üzere erişim belirteçlerini döndürdüğü bir web uygulamasında kullanılır.
Uygulamaya tamamen güvenilmelidir. Genellikle bu akışın kullanılması önerilmez.
4. Form Gönderisiyle Örtülü Akış
Örtülü akış, Tek Sayfa Javascript (SPA) uygulamaları tarafından, bir erişim belirteci için yetkilendirme kodunu değiştirmeye gerek kalmadan erişim belirteçleri almak için kullanıldı. Ekstra bir yetkilendirme kodu değişim adımı olmadığı için bu akış güvenli değildir.
Erişim belirteçlerini, istemci tarafından alındığına dair herhangi bir onay olmaksızın bir HTTP yeniden yönlendirmesinde döndürür.
5. Hibrit Akış
Hibrit Akış aslında, daha önce gördüğümüz Yetkilendirme Kodu akışının ve Örtük akışların özelliklerini bir araya getiren bir OpenID Connect akışıdır.
Yetkilendirme kodu akışında, istemci uygulaması, Yetkilendirme sunucusundan yalnızca bir Kimlik Doğrulama kodu alır ve ardından istemci uygulaması, bir Erişim belirteci için Kimlik Doğrulama kodunu değiştirir. Ancak bu akış, yetkilendirme uç noktasından yetkilendirme kodlarının ve belirteçlerin aynı anda döndürülmesine izin verir. Bu akış, istemci, Kimlik Doğrulama kodunu bir erişim belirteci ile değiştirmeden önce bazı işlemler yapmak istiyorsa çok kullanışlıdır.
6. Cihaz Yetkilendirme Akışı
Cihaz Yetkilendirme akışı, sınırlı girişi olan veya tarayıcısı olmayan cihazları kullanan kullanıcılara kimlik bilgilerini yazma yetkisi vermek için kullanılır. Kullanıcının kimlik bilgilerini girme seçeneği yoktur ve bu nedenle cihaz, uygulamaya bağlanmak için erişim belirteçleri alamaz. Bu akışın anlamı budur.
Cihaz, kullanıcının kimliğini doğrudan doğrulamak yerine, kullanıcıdan bilgisayarında veya akıllı telefonunda bir bağlantıya gitmesini ve cihazı yetkilendirmesini ister. Bu, televizyondaki akış uygulaması tarafından sağlanan bağlantıda yetkilendirerek TV’deki bir akış uygulamasında oturum açmak için kullanmış olabileceğimiz akıştır.
Bu akış, kullanıcıların mobil, televizyon, oyun konsolu vb. uygulamalara giriş yapacakları cihazlar için oldukça kullanışlıdır.
7. PKCE ile Yetki Kodu Akışı
Bu akış, daha önce tartıştığımız Yetkilendirme akışında küçük bir değişikliktir. PKCE, Kod Değişimi için Kanıt Anahtarı anlamına gelir
İstemcinin sırrını paylaşamayan yerel veya tek sayfalı uygulamalar bu akışı kullanabilir.
Bu gelişmiş Yetkilendirme kodu akışı, uygulama tarafından oluşturulan ekstra güvenliği sağlar. Uygulama , Prova Anahtarı kullanılarak yetkilendirme sunucusu tarafından doğrulanabilen Kod Doğrulayıcı adlı bir sır oluşturur .
Çağıran uygulama ayrıca, bir Yetkilendirme Kodu almak için HTTPS üzerinden gönderilen Code Challenge adlı kod doğrulayıcının bir dönüştürme değeri oluşturur. Bilgisayar korsanı, Yetkilendirme kodunu ele geçirebilir ancak Kod Doğrulayıcı olmadan bunu bir belirteçle değiştiremez.
Bilinmeyen genel istemcilere hizmet vermesi gereken uygulamalar, kimlik doğrulama kodu akışı tarafından uygulanmayan ek güvenlik önlemlerine sahip olduğundan bu akışı kullanabilir.
Open ID Connect kullanılarak OAuth2 protokolünde kimlik doğrulama
OAuth2’nin Kimlik Doğrulama için değil, yalnızca Yetkilendirme için kullanılabileceğinden bahsetmiştim. OAuth2 Authenticate kullanıcılarının, Open ID Connect veya OIDC adlı başka bir hafif çerçeve kullanarak sisteme giriş yapmasını sağlayabiliriz.
Yukarıdaki diyagram, Google kullanarak bir uygulamada oturum açtığınızda gerçekleşen tüm süreci açıklamaktadır. Adımların sayısı karmaşık görünebilir. Ancak bu genel süreç milisaniyeler ila saniyeler arasında sona erer. Adım adım parçalayalım.
Kullanıcının Google’da zaten bir giriş hesabı olduğunu varsayın
- Kullanıcı oturum açmak için Bitbucket sayfasına gider
- Kullanıcı, Google ile oturum aç’ı tıklar
- Tarayıcı, kullanıcıyı Google giriş sayfasına yönlendirir
- Google, kullanıcıların kimlik bilgilerini girmesi için kimlik bilgileri sayfasını gösterir
- Kullanıcı google kimlik bilgilerini girer ve gönder’i tıklar
- Google, kimlik bilgilerini doğrular ve Erişim Simgesi oluşturur ve bunu tarayıcıya gönderir
- Tarayıcı, Erişim Simgesini (Taşıyıcı Simgesini) Yetkilendirme Başlığına yerleştirir ve kullanıcının oturum açma isteğini BitBucket sunucusuna gönderir.
- Bitbucket sunucusu, erişim belirtecini doğrulamak için Google ile iletişime geçecek ve tarayıcıya yanıt verecektir.
- Artık kullanıcı Bitbucket uygulamasında oturum açar
Bu yazımızda OAuth2 protokolünü ve terminolojilerini detaylı olarak gördük. Ardından OAuth2’de kullanılan 7 farklı akışı gördük. Makaleyi OAuth2’yi Kimlik Doğrulama için OIDC çerçevesiyle birlikte kullanmaya bakarak sonlandırdık.
Umarım bu makaleyi okumaktan keyif almışsınızdır. Okuduğunuz için teşekkürler.