OAuth 2.0

5 Ağu

OAuth 2.0 protokolüne genel bir bakış niteliğinde olan bu yazıda uygulama detaylarına girmeden protokolün işleyişi ve karakteristiği incelenmektir. Uygulamalı örnekleri belki daha sonraki yazılarda paylaşma imkanı olabilir.

OAuth protokolü Web , Mobil ve Masaüstü uygulamalarına basit ve standart bir yöntemle uygulamalara güvenli yetkilendirme imkanı sunan açık bir protokoldür. OAuth sayesinde erişim izni sınırlı olan verilerin yani korunmuş verilerin güvenli bir şekilde hizmete sunulması basitleştirilmiştir.

OAuth 2.0 protokolü, OAuth 1.0 üzerinde geliştiricilere yönelik kolaylıklar sağlamak amacıyla yapılan bir dizi düzenlemeler sonrası 2006 yılında ortaya çıkan versiyondur.

OAuth 2.0 uygulamaların birbirleri arasında veri erişimine olanak sağlayan açık bir yetkilendirme protokolüdür. Burada vurgulamak isterim ki OAuth, kullanıcı doğrulama amaçlı değil uygulama yetkilendirme amaçlı bir protokoldür. Bir uygulamanın başka bir uygulama tarafından doğrulanmış kullanıcılara izin vermesidir. Örneğin stackoverflow uygulamasın giren ziyaretçilerin sisteme erişebilmeleri için kişisel Facebook hesapları ile giriş yapanlarına izin verilmektedir.

Günümüzde sosyal medya uygulamalarının bir çoğu (Facebook, Google, Twitter v.s) OAuth 2.0 protokolünü desteklemektedir. Örneğin bir web sitesinin Login seçenekleri arasında Facebook veya Google hesabı ile kullanıcılarına Login seçeneği sunuyor olması bu uygulamaların kullanıcı doğrulama ve uygulama yetkilendirme işlemini OAuth protokolünü kullanarak gerçekleştirmesi sayesinde mümkün olmaktadır.

bootstrap-login

OAuth bir istemci veya sunucu kütüphanesi değildir. Sadece uygulamalar arasında yetkilendirme amacıyla oluşturulmuş bir protokolüdür. Ancak OAuth standardına uygun olacak şekilde çeşitli platformlarda (PHP, Java, .Net, Python, Nodejs, v.s) geliştirilmiş sunucu ve istemci kütüphaneleri mevcuttur. İlgili kütüphanelere buradan erişmek mümkündür.

file-POvDVUfM8H

Bu kütüphaneler sayesinde gerçekleştirilebilecek iki tür uygulama vardır.

  • Birincisi sunucu tarafında oluşturulan bir yetkilendirme uygulaması. Bu uygulama sayesinde siz de bir doğrulama ve yetkilendirme sunucusu oluşturabilirsiniz. Başka uygulamalar da sizin bu uygulamanızı kullanarak tıpkı Facebook ve Google gibi sizin uygulamanız ile yetkilendirme yapabilirler.
  • İkincisi OAuth 2.0 protokolüne uygun bir istemci uygulaması. Bu uygulama ile OAuth 2.0 destekli bir sunucu uygulamasında bulunan kaynağa erişebilirsiniz.

OAurh 2.0 Teknolojisinde Roller

OAuth 2.0 protokolü dahilinde birbirleri ile iletişim kuran taraflar şu şekildedir.

  1. Resource owner
  2. Client Application
  3. Authorization Server
  4. Resource Server

Resource Owner: Bir sistemde bulunan veriye sahip olan kişi veya uygulamadır. Örneğin Twitter uygulamasında hesabınıza girerek paylaştığınız tweet, resim veya videolar size ait birer veridir ve burada Resource Owner siz olursunuz.

Client Application: Resource Owner’ın sahip olduğu verilere erişen uygulamadır.  Eğer kişisel blog sayfanızda size ait tweet’leri paylaşmak istiyorsanız blog sayfanızın Resource Server’a yani Twitter sunucularına erişmeniz gerekir. Bu durumda Client, sizin kişisel blog sayfanız olur.

Authorization Server: Client Application olarak belirlenen uygulamalara yetki veren sunuculardır. Size ait Tweet’leri kişisel blog sayfanıza çekmek istediğinizde Twitter sunucularının sizin blog sayfasını tanıması gerekmektedir. Bu durumda önce sayfanızın adres bilgilerini Twitter sunucularına kaydetmeniz gerekmektedir. Ardından sizin sayfanızdan Twitter sunucularına bir talep gittiğinde uygulamanız yetkilendirilecektir. Bu doğrulamayı ve yetkilendirmeyi yapan Twitter sunucuları OAuth 2.0 protokolündeki Application Server’dır.

Resource Server: Erişilmek istenen korunmuş verilerin bulunduğu yerdir. Örneğin kişisel blog sayfanızda yayınlamak üzere erişmek istediğiniz Tweet’leri sunan Api uçları (endpoints) Reource olarak adlandırılır.

OAuth 2.0 Dolaşım Sistemi (Flows)

OAuth 2.0 protokolünde kullanıcının(client) gerekli olan veriye erişmek amacıyla izlediği yola flow denir. Örneğin access_token veya id_token bilgilerine erişmek bir flow süreci kapsamında gerçekleştirilir. Flow sürecinde, taraflar arasında gerçekleşen dolaşım sistemi (flows) genel olarak şu şekildedir:

slack_oauth_flow_diagram@2x
Resim Kaynağı: https://api.slack.com/docs/oauth

Dolaşım sisteminin başlangıç noktası Resource Owner yani kaynak sahibidir. Reource Owner, yetkilendirme akışını Client Application üzerinden başlatır. Yetki verme (Authorizetion Grant) isteği uygulama üzerinden Authorization Server tarafına aktarılır. Kullanıcı doğrulandığında Client Application tarafına kaynağa erişmek amacıyla bir Access Token gönderilir. Artık Access Token ile Resource Server üzerindeki bilgilere erişmek mümkün hale gelmiştir.

OAuth 2.0 Genel Kavramları

OAuth 2.0 bünyesinde ele alınacak olan genel kavramlar genel başlıklar halinde şöyledir:

  1. OAuth 2.0 Roles
  2. OAuth 2.0 Client Types
  3. OAuth 2.0 Authorization Flows
  4. OAuth 2.0 Authorization Endpoints

OAuth 2.0 protokolü ile ilgili detaylı bilgilere buradan ulaşmak mümkündür.