OAuth 2.0 nedir? Nasıl çalışır ?


OAuth 2.0

OAuth 2.0 yetkilendirme için endüstri standardı protokoldür. OAuth 2.0, 2006’da oluşturulan orijinal OAuth protokolünde yapılan çalışmaların yerine geçer.

bu OAuth 2.0 yetkilendirme çerçevesi bir üçüncü taraf uygulamasının, kaynak sahibi ile HTTP hizmeti arasında bir onay etkileşimi düzenleyerek veya üçüncü taraf uygulamasının kendi başına erişim elde etmesine izin vererek bir kaynak sahibi adına bir HTTP hizmetine sınırlı erişim elde etmesini sağlar. adına.

OAuth 2.0 Önceki Uygulamalar

1. Basit Oturum Açma: Form Tabanlı Kimlik Doğrulama

OAuth 2.0
Şekil 1 Basit Form Tabanlı Kimlik Doğrulama

Dezavantajlar- ​

  1. Her oturum açma etkinliğinin güvenliğini sağlama
  2. Formların bakımı, karma algoritmalar, çerezler, oturum değişkenleri vb.

2. Tek Oturum Açma : SAML (Güvenlik Onayı İşaretleme Dili)

Güvenlik Onayı İşaretleme Dili taraflar arasında, özellikle bir kimlik sağlayıcı ile bir hizmet sağlayıcı arasında kimlik doğrulama ve yetkilendirme verilerinin değiş tokuşu için açık bir standarttır. SAML, güvenlik beyanları için XML tabanlı bir biçimlendirme dilidir.

DÖRT

3. Temsil Edilen Yetkilendirme

Diğer web sitelerinin, bir kaynak sahibinin başka bir web sitesinde saklanan verilerine Parola vermeden erişmesine izin vermek.

Temsil Edilen Yetkilendirme için Önceki Çözümler

1. Yelp

Bu, Yelp’in devredilen yetkilendirme sorununu çözmek istediği ve bir kullanıcının posta kimliğini ve Parolasını girerek tercih ettiği posta kimliğinden verilerinin bir kısmına Yelp’in erişmesine izin verebileceği bir yöntem dahil ettiği bir örnektir.

Şekil.2 Yelp’te Temsil Edilen Yetkilendirme

2. Facebook

Bu, Facebook’un devredilen yetkilendirme sorununu çözmek istediği bir örnektir ve bir kullanıcının Facebook’un kendi tercih ettiği posta kimliğinden verilerinin bir kısmına, bunun için posta kimliğini ve Parolasını girerek erişmesine izin verebileceği bir yöntem dahil etmiştir.

Şekil.3 Facebook’ta Temsil Edilen Yetkilendirme

Önceki Çözümlerle İlgili Sorunlar

Gösterilen durumlarda, bir kullanıcının Yelp veya Facebook’a güvenmesi ve posta kimliğini ve şifresini güvende tuttuklarına ve ayrıca istedikleri dışında başka hiçbir bilgiye erişmediklerine inanması gerekecektir.​

Bunlar, devredilen yetkilendirmeyi uygulamanın güvenli olmayan ve kötü yollarıydı ve kullanıcının kimlik bilgilerinin yanı sıra hesabını da her zaman risk altında bırakıyordu.​

Temsil Edilen Yetkilendirme için Bugünkü Çözümler

OAuth 2.0
Şekil.4 Günümüzde Temsil Edilen Yetkilendirme için Çözümler

Verilen örnekte, kullanıcı Google’dan Yelp/Facebook’un Google API’lerini kullanarak yalnızca kişilerine erişmesine izin vermesini istemektedir.​

Burada, kullanıcının kimliğini doğruladıktan sonra, Google API, kullanıcının kişilerinin Yelp/Facebook’a erişimine izin verecektir.

Gerçek Hayat Örneği

Aşağıda, devredilen yetkilendirmenin güvenli bir şekilde uygulanmasını içeren gerçek hayattan örnekler verilmiştir.

Burada Spotify, kullanıcının Facebook verilerinin bir kısmına erişmek istiyor.

Şekil 5 Spotify, kullanıcının bazı Facebook verilerine erişiyor

OAuth 2.0 Terminolojisi

Gmail(Google) API’sini ve kimlik bilgilerini kullanarak LinkedIn’de oturum açmaya çalışan bir kullanıcı örneğini ele alırsak:

  • Kaynak Sahibi: Uygulama ile etkileşimde bulunan kullanıcı ( kullanıcı uygulamanın ulaşmak istediği verilerin sahibidir)
  • Müşteri: Kullanıcının doğrudan etkileşimde bulunduğu uygulama (LinkedIn)
  • Yetkilendirme Sunucusu: Kullanıldığı sunucu Yetki vermek istemci tarafından kullanıcının verileri için gönderilen istek (Gmail)
  • Kaynak Sunucusu: İstemcinin verilerini gerçekten tutan API veya sistem (Gmail API’sı )
  • Yetkilendirme Hibesi: İstemciye Yetkilendirme Sunucusu tarafından izin verildiğini kanıtlayan varlık
  • Yönlendirme URI’sı: Yetkilendirme Sunucusu tarafından Yetkilendirme Verildikten sonra istemciye, istemci tarafından sağlanan geri arama adresine gönderilir, bu geri arama bazen Yeniden Yönlendirme URI’si olarak bilinir.
  • Erişim Simgesi: İstemci tarafından Kaynak Sunucusunda kendisine erişim izni verilen kaynaklara erişmek için kullanılan anahtardır.

Kanallar

Tüm sürecin gerçekleştiği iki tür kanal vardır.

  1. Ön Kanal: Kullanıcının tarayıcı tarafındaki istemcisi ile Yetkilendirme Sunucusu arasındaki ilk (çok güvenli olmayan) kanaldır.
  2. Arka Kanal: Müşteri Sunucusu ile Yetkilendirme Sunucusu ve Müşteri Sunucusu ile Kaynak Sunucusu arasındaki yüksek güvenlikli kanaldır.

İstemci Türleri

OAuth, yetkilendirme sunucusuyla güvenli bir şekilde kimlik doğrulama becerilerine (yani, müşteri kimlik bilgilerinin gizliliğini koruma becerilerine) bağlı olarak iki istemci türü tanımlar:​

Gizli: Kimlik bilgilerinin gizliliğini koruyabilen istemciler (örneğin, istemci kimlik bilgilerine kısıtlı erişime sahip güvenli bir sunucuda uygulanan istemci) veya başka araçlar kullanarak güvenli istemci kimlik doğrulaması yapabilen istemciler.​

Halk: Kimlik bilgilerinin gizliliğini koruyamayan istemciler (ör. kaynak sahibi tarafından kullanılan, kurulu bir yerel uygulama veya web tarayıcı tabanlı bir uygulama gibi aygıtta çalışan istemciler) ve başka herhangi bir yolla güvenli istemci kimlik doğrulaması gerçekleştiremeyen istemciler.

Protokol Uç Noktaları

Yetkilendirme işlemi, iki yetkilendirme sunucusu uç noktası kullanır (HTTP kaynakları):

Yetkilendirme bitiş noktası — müşteri tarafından, kullanıcı aracısı yeniden yönlendirmesi yoluyla kaynak sahibinden yetki almak için kullanılır.​

Belirteç uç noktası — müşteri tarafından, tipik olarak müşteri kimlik doğrulaması ile bir erişim belirteci için bir yetkilendirme verilmesini değiştirmek için kullanılır.​

Bir müşteri uç noktasının yanı sıra:​

Yönlendirme bitiş noktası — yetkilendirme sunucusu tarafından, kaynak sahibi kullanıcı aracısı aracılığıyla istemciye yetkilendirme kimlik bilgilerini içeren yanıtları döndürmek için kullanılır.

OAuth 2.0’ın Eylem Halinde Basit Temsili

Şekil 6 OAuth 2.0’ın iş başında Basit Temsili

Adımlar:

  1. Yelp/Facebook, kullanıcının Gmail kişilerine erişmek istiyor, bu nedenle Google’ın API’sini kullanarak bunu yapma seçeneği sunuyorlar.
  2. Kullanıcı Google ile Bağlan’ı tıkladığı anda, kendisinden gmail kimlik bilgilerini girmesinin istendiği bir google uç noktasına yönlendirilir (Kimlik Doğrulama)
  3. Kimlik Doğrulama başarılı olduğunda, kullanıcıya Yelp/Facebook’un verilerine erişmesine izin vermek isteyip istemediği sorulur.
  4. Kullanıcı Evet’i tıklarsa, tekrar Yelp/Facebook’a yönlendirilir ve Yelp/Facebook’a kişilerine erişim hakkı verilir.
  5. Kullanıcı Hayır’ı tıklarsa, erişim talebi sonlandırılır.

Yelp/Facebook’un Gmail kişilerine erişme işleminin noktalı çizgilerle yapıldığını görüyoruz, bu da Arka Kanal üzerinden gerçekleştiğini ima ediyor.

Kesintisiz çizgiler Ön Kanalı temsil eder.

OAuth 2.0 Yetki Verme

Bir Yetkilendirme Hibesi istemci tarafından bir erişim belirteci almak için kullanılan kaynak sahibinin yetkilendirmesini (korumalı kaynaklarına erişmek için) temsil eden bir kimlik bilgisidir.​

Aşağıdaki türlere sahiptir:

1. Yetkilendirme Kodu​

Yetkilendirme kodu, istemci ile kaynak sahibi arasında aracı olarak bir yetkilendirme sunucusu kullanılarak elde edilir.

İstemci, doğrudan kaynak sahibinden yetki talep etmek yerine, kaynak sahibini kendi kullanıcı aracısı aracılığıyla bir yetkilendirme sunucusuna yönlendirir, bu da kaynak sahibini yetkilendirme koduyla tekrar istemciye yönlendirir.​

Yetkilendirme sunucusu, kaynak sahibini yetkilendirme koduyla istemciye geri yönlendirmeden önce kaynak sahibinin kimliğini doğrular ve yetki alır.

Kaynak sahibi yalnızca yetkilendirme sunucusuyla kimlik doğrulaması yaptığından, kaynak sahibinin kimlik bilgileri asla istemciyle paylaşılmaz.​

2. Örtük​

Örtük izin, JavaScript gibi bir betik dili kullanan bir tarayıcıda uygulanan istemciler için optimize edilmiş basitleştirilmiş bir yetkilendirme kodu akışıdır.

Örtük akışta, müşteriye bir yetkilendirme kodu vermek yerine, müşteriye doğrudan bir erişim belirteci verilir.

Örtük izin akışı sırasında bir erişim belirteci yayınlarken, yetkilendirme sunucusu istemcinin kimliğini doğrulamaz. Bazı durumlarda istemci kimliği, erişim belirtecini istemciye teslim etmek için kullanılan yeniden yönlendirme URI’si aracılığıyla doğrulanabilir.

3. Kaynak Sahibi Parola Kimlik Bilgileri​

​Kaynak sahibi parola kimlik bilgileri (ör. kullanıcı adı ve parola), bir erişim belirteci elde etmek için doğrudan bir yetkilendirme olarak kullanılabilir. Kimlik bilgileri, yalnızca kaynak sahibi ile müşteri arasında yüksek derecede bir güven olduğunda ve diğer yetkilendirme verme türleri mevcut olmadığında kullanılmalıdır.

4. İstemci Kimlik Bilgileri

İstemci kimlik bilgileri (veya diğer istemci kimlik doğrulama biçimleri), yetkilendirme kapsamı, istemcinin kontrolü altındaki korunan kaynaklarla veya yetkilendirme sunucusuyla önceden ayarlanmış korunan kaynaklarla sınırlı olduğunda bir yetkilendirme olarak kullanılabilir.

İstemci kimlik bilgileri, tipik olarak, istemci kendi adına hareket ettiğinde (istemci aynı zamanda kaynak sahibidir) veya yetkilendirme sunucusuyla önceden düzenlenen bir yetkiye dayalı olarak korunan kaynaklara erişim talep ettiğinde bir yetkilendirme yetkisi olarak kullanılır.

OAuth 2.0 Erişim ve Yenileme Jetonları

Erişim belirteçleri korunan kaynaklara erişmek için kullanılan kimlik bilgileridir. Erişim belirteci, istemciye verilen bir yetkilendirmeyi temsil eden bir dizedir.

Dize genellikle istemci için opaktır. Belirteçler, kaynak sahibi tarafından verilen ve kaynak sunucusu ile yetkilendirme sunucusu tarafından uygulanan belirli erişim kapsamlarını ve sürelerini temsil eder.

Belirteçleri yenile erişim belirteçlerini elde etmek için kullanılan kimlik bilgileridir. Yenileme belirteçleri, yetkilendirme sunucusu tarafından istemciye verilir ve mevcut erişim belirteci geçersiz olduğunda veya süresi dolduğunda yeni bir erişim belirteci elde etmek veya aynı veya daha dar kapsamda ek erişim belirteçleri elde etmek için kullanılır (erişim belirteçlerinin kullanım ömrü daha kısa olabilir ve kaynak sahibi tarafından yetkilendirilenden daha az izin).

Bir yenileme belirteci verilmesi, yetkilendirme sunucusunun takdirine bağlı olarak isteğe bağlıdır. Yetkilendirme sunucusu bir yenileme belirteci verirse, bir erişim belirteci verilirken dahil edilir.

Yenileme belirteci, kaynak sahibi tarafından istemciye verilen yetkiyi temsil eden bir dizedir. Dize genellikle istemci için opaktır.

Belirteç, yetkilendirme bilgilerini almak için kullanılan bir tanımlayıcıyı belirtir. Erişim belirteçlerinden farklı olarak, yenileme belirteçleri yalnızca yetkilendirme sunucularıyla kullanım amaçlıdır ve hiçbir zaman kaynak sunuculara gönderilmez.​

Yetki Alma Örneği: Yetki Kodu Verme

Şekil 7 OAuth 2.0 Çalışırken

Adımlar:

  1. Yelp/Facebook, kullanıcının gmail kişilerine erişmek istiyor, bu nedenle Google’ın API’sini kullanarak bunu yapma seçeneği sunuyorlar.
  2. Kullanıcı Google ile Bağlan’ı tıkladığı anda, kendisinden gmail kimlik bilgilerini girmesinin istendiği (Kimlik Doğrulama) bir Yetkilendirme Sunucusuna yönlendirilir. Bu istek ayrıca, isteğin Yönlendirme URI’sini, Yanıt Türünü ve Kapsamını da içerir.
  3. Kimlik Doğrulama başarılı olduğunda, kullanıcıya Yelp/Facebook’un verilerine erişmesine izin vermek isteyip istemediği sorulur.
  4. Kullanıcı Evet’i tıklarsa, bir Yetkilendirme Koduyla birlikte Yelp’in/Facebook’un Yeniden Yönlendirme URI’sine yönlendirilir.
  5. Kullanıcı Hayır’ı tıklarsa, erişim talebi sonlandırılır.
  6. Yelp’in/Facebook’un Sunucusu daha sonra Yetkilendirme Sunucusu ile Yetkilendirme Kodunu değiştirir ve yanıt olarak Yetkilendirme Sunucusu tarafından bir Erişim Simgesi verilir.
  7. Yelp’in/Facebook’un Sunucusu daha sonra veri erişim isteğini Erişim Belirteci ile birlikte Kaynak Sunucuya gönderir ve yanıt olarak kapsamdaki verilere erişim verilir.

Soyut Protokol Akışı — OAuth 2.0

Süresi Dolmuş Bir Erişim Simgesini Yenileme



Source link