Authorization Code ile yetkilendirilen uygulamalar Confidential Client türündeki yani sunucu taraflı çalışan uygulamalardır. Bu tür uygulamaların Authorization Server tarafından yetkilendirmesi iki aşamada ve dört basamakta gerçekleşir.
Authorization Request
Authorization Response
Token Request
Token Response
1- Authorization Request
Web uygulaması için gerekli kodu (Authorization Code) elde etmek için Authorization Endpoint’e gönderilen taleptir. Kullanılan parametreler:
response_type : Zorunlu parametredir. Alacağı değer “code” olmalıdır.
client_id : Zorunlu parametredir. Authorization Server tarafından önceden verilmiştir.
redirect_uri : İsteğe bağlı parametredir. İstemci tarafından belirlenir.
scope : İsteğe bağlı parametredir Talebin kapsamını belirler.
state : İsteğe bağlı parametredir.
2- Authorization Response
Authorization Request sonucunda Authorization Server tarafından uygulamaya dönen cevaptır. Parametreler:
code :Zorunlu parametredir. Yetkilendirme kodu.
state : Request parametresi olarak belirtilmişse cevapta dönmesi zorunludur.
Authorization Error Response
Authorization sırasında bir hata oluşursa iki durum söz konusu olacaktır.
Kullanıcının yetkilendirilemediği veya tanınmadığı durum. Bu durum geçersiz bir Redirect URI belirlendiğinde veya kullanıcı kimlik bilgileri bilinmediği durumlarda ortaya çıkar.
Kullanıcı doğrulanır fakat başka bir durumdan dolayı hatanın meydana geldiği durum. Bu gibi durumlarda kullanıcıya dönen cevap şu şekilde olacaktır.
error: Zorunlu parametredir. Hatanın ne olduğunu belirten mesajdır.
error_description: Geliştiricilere bilgi veren isteğe bağlı bir parametredir.
error_uri: Hata hakkında bilgi veren bir web sayfasının adresini veren isteğe bağlı parametredir.
state: Request sırasında belirlenmiş ise cevapta dönmesi zorunludur.
3- Token Request
Yetkilendirme kodu (Authorization Code) alındıktan sonra uygulama bu kodu access token elde etmek için kullanır. Token elde etmek için token endpoint adresine talepte bulunulur. Access token talebi için parametreler:
client_id: Zorunlu parametredir. Authorization Server tarafından önceden verilir.
client_secret: Zorunlu parametredir. Authorization Server tarafından önceden verilir.
grant_type: Zorunlu parametredir. Alacağı değer “authorization_code” şeklindedir.
OAuth 2.0 protokolünde javascript gibi Public Client türündeki uygulamalarda access token elde etmek için Token Endpoint adresine talepte bulunulur.
Implicit Request
Implicit yetkilendirme için token talebi için gerekeli parametreler şu şekildedir:
response_type : Zorunlu parametredir. Alacağı değer “token” olmalıdır.
client_id : Zorunlu parametredir. Authorization Server tarafından önceden verilmiştir.
redirect_uri : İsteğe bağlı parametredir. İstemci tarafından belirlenir.
scope : İsteğe bağlı parametredir Talebin kapsamını belirler.
state : İsteğe bağlı parametredir.
Implicit Response
Imlicit talebine karşılık olarak JSON formatında bir içerik döner.
access_token: Zorunlu parametredir. Authorization Server tarafından üretilen şifreli bilgidir.
token_type: Zorunlu parametredir. Authorization Server tarafından belirlenen token türüdür.
expires_in: İsteğe bağlı parametredir. Access token için belirlenen saniye cinsinden geçerlilik süresidir. Süre bittiğinde token artık geçersizdir.
refresh_token: Zorunlu parametredir. Access token süresi dolduğunda yeni bir token elde etmek için kullanılacak olan parametredir.
Implicit Error Response
Authorization sırasında bir hata oluşursa iki durum söz konusu olacaktır.
Kullanıcının yetkilendirilemediği veya tanınmadığı durum. Bu durum geçersiz bir Redirect URI belirlendiğinde veya kullanıcı kimlik bilgileri bilinmediği durumlarda ortaya çıkar.
Kullanıcı doğrulanır fakat başka bir durumdan dolayı hatanın meydana geldiği durum. Bu gibi durumlarda kullanıcıya dönen cevap şu şekilde olacaktır.
error: Zorunlu parametredir. Hatanın ne olduğunu belirten mesajdır.
error_description: Geliştiricilere bilgi veren isteğe bağlı bir parametredir.
error_uri: Hata hakkında bilgi veren bir web sayfasının adresini veren isteğe bağlı parametredir.
state: Request sırasında belirlenmiş ise cevapta dönmesi zorunludur.
OAuth 2.0 protokolünde tanımlanmış üç adet endpoint vardır. Bunlardan iki tanesi authorization server endpoint, bir tanesi ise client endpoint şeklindedir.
Endpoint olarak adlandırılan kavram web server üzerinde tanımlanan bir URI adresidir. Protokole dair bağlantılar tanımlanan bu adresler üzerinden sağlanmaktadır.
Authorization Endpoint
Authorization Server üzerinde yetkilendirme amacıyla tanımlanan bir (URI) adrestir. Amacı kaynak sahibinden(Resource Owner) istemci uygulamanın(Client Applicaiton) kaynağa erişebilmesi için yetki alabilmesidir.
Authorization Server öncelikle kaynak sahibinin kimlik bilgilerini doğrular. Ancak kullanıcı kimlik doğrulama işlemi OAuth 2.0 protokolü kapsamının dışında bir işlemdir. Yani kullanıcılar Facebook, Twitter veya Google üzerindeki hesaplar olabileceği gibi şirketinize ait bir veri tabanında da bulunuyor olabilir. Bu durumda doğrulama yükü dış kaynaklı bir sürece dahildir.
Token Endpoint
Authorization Server üzerinde istemci uygulamalara(Client Applicaiton) access token sağlamak amacıyla tanımlanan (URI) adrestir. Uygulama eğer Confidential Client türünde ise doğrulama kodu (authorization code), Client ID, Client Secret gibi bilgiler karşılığında access token bilgisi elde edilir. Eğer Public Client türünde bir uygulama ise kullanıcı adı ve şifre bilgileri ile access token elde edilir.
Güvenli bir ortamda veri alışverişini sağlamak açısından Authorization Endpoint ve Token Endpoint için tanımlanan adresler için TLS(SSL) gerekliliği aranmalıdır.
Redirection Endpoint
Yetkilendirme işlemi gerçekleştiğinde, kaynak sahibinin (Resource Owner) yönlendirileceği bir aderstir (URI). Bu adres Client Applicaiton içerisinde tanımlanmaktadır.
OAuth 2.0 protokolünde Client Application (istemci uygulama) protokol kapsamında belirlenen bir akış dahilinde Resource Server üzerindeki korunmuş verilere erişebilmektedir. Bu akışa OAuth 2.0 protokolünde protocol flow denir. Bir uygulamanın Resource Server tarafına erişebilmesi için öncelikle Authorization Server tarafından yetkilendirilmesi gerekmektedir. Bu yazıda yetkilendirme adımlarının nasıl gerçekleştirildiği üzerinde durulmaktadır.
Client Application bir Resource Server üzerindeki korunmuş bir veriye erişmek istediğinde ihtiyaç duyduğu yetkiyi Authorization Server üzerinden alır. Bu nedenle yetkilendirilecek olan her Client Application öncelikle Authorization Server üzerine kaydedilmelidir. Bu sayede hangi uygulamanın yetkilendirilecek uygulama olduğu Authorization Server tarafından bilinir ve belirlenen liste haricindeki uygulamalara geçit verilmez. Uygulamanın Authorization Server üzerine kaydı bir kez gerçekleştirilir ve kayıt silinene kadar uygulama sistemde geçerli kalır.
Bir uygulama Authorization Server üzerine kaydedildiğinde, uygulamaya özel bir Client IDve Client Secretşeklinde benzersiz iki yetki belgesi verilir. Resource Server üzerinde korunmuş verilere erişmek isteyen her Client Application kendi Client ID ve Client Secretbilgisini Authorization Server üzerinden doğrular. Authorization Server üzerine kaydedilen Client Application için kaydedilen bir diğer parametre ise Redirect URI’dır. Bu parametre Resource Owner için başarılı bir şekilde yetkilendirme gerçekleştirildiğinde yönlendirme yapmak için kullanılır. Örneğin kullanıcı adı ve şifresini doğru giren bir kullanıcının ana sayfaya yönlendirilmesi bu şekilde gerçekleştirilebilir.
OAuth 2.0 teknolojisinde yetki verme işlemi Authorization Grant olarak adlandırılır.
Authorization Grant (Yetki Verme)
Client Application yetkilendirmesi sırasında Authorization Server ile Resource Server işbirliği içerisinde hareket eder.
OAuth 2.0 protokolünde teknik olarak dört farklı yetkilendirme seçeneği bulunmaktadır.
Bir uygulamaya yetki verme işlemi sırasında birden fazla adımdan meydana gelen bir dolaşım söz konusudur. Bu dolaşım yada akış OAuth 2.0 teknolojisinde Flow olarak adlandırılır.
Tüm akışlar (flow) her durumda kullanılabilir. Ancak her durum için kullanılması önerilen akışlar vardır. Uygulama türüne göre Web sitesi, mobil uygulama veya javascript uygulamaları için önerilen akışlar vardır. Örneğin native(mobil) ve javascript uygulamaları için implicit flow önerilir.
Authorization Code
Sunucu tabanlı çalışan uygulamalar için yetki verme işlemi Authorization Code tekniği ile gerçekleştirilir. Yani uygulama sunucusu (Client Application Server) ile veri kaynağının bulunduğu sunucu (Reource Server) arasında bir kimlik kontrolü gerçekleştirilir. Bu dolaşımda, Resource Owner tarafında kimlik bilgileri dolaşmaz. Authorization Code yetkilendirmesi Confidential Client türündeki uygulamalarda kullanılır.
Resource Owner(kullanıcı) korunmuş bir kaynağa erişmek üzere uygulamayı(Client Application) açar.
Uygulama kullanıcıya giriş yapması gerektiğini bildiren bir sayfaya yönlendirir. Bu sayfada giriş yapmak için Authorization Server seçenekleri bulunur. Örneğin Facebook, Gmail, Twitter gibi.
Bir seçeneği tercih eden kullanıcı giriş yapabilmesi için Authorization Server üzerinde bulunan login sayfasına yönlendirir. Örneğin Facebook, Gmail, Twitter giriş sayfası. Uygulama sunucusu arka planda Authorization Server tarafına Client ID bilgisini de gönderdiğinden dolayı Authorizaiton Server uygulamayı tanır.
Authorization Server sayfasından kullanıcı bilgileri girilerek login işlemi gerçekleştirilir. Örneğin Twitter ile login işlemi gerçekleştirilir. Login işlemi başarılı bir şekilde gerçekleştirildikten sonra uygulamanın Twitter hesabı ile yetki almasını kabul edip etmediği sorulur. Hatta profil bilgileri, resim bilgileri kullanılsın mı şeklinde işaretlenebilir kutucuklar halinde kullanıcıya seçenekler sunulur. Kullanıcı kabul ederse Client Application’a yönlendirilir.
Client Applicaiton sayfasına yönlendirildiğinde Authorization Server üzerine önceden kaydedilmiş olan Redirect URI adresine yönlendirilir. Yönlendirme ile birlikte Authorization Server tarafından yetkilendirmeyi temsil eden bir doğrulama kodu gönderir.
Redirect URI yönlendirmesi sonrasında Client Application doğrudan Authorization Server ile bağlantı kurar ve doğrulama kodu(authorization code) ile birlikte Client ID ve Client Secret bilgisini gönderir.
Eğer Authorization Server bilgilerin doğruluğunu kabul ederse geriye bir access token gönderir.
Kullanıcı login olduğunu görüntüleyen bir sayfaya yönlendirilir.
Korunmuş bir veri kaynağına erişim talebi yapılır.
CLient Applicaiton daha önce elde ettiği access token ile birlikte Resource Server üzerindeki kaynağı talep eder. Bu kez Resource Server access token doğrulamasını yapmak için Authorization Server ile bağlantı kurar. Token geçerliliği doğrulanırsa kaynaktaki veri uygulamaya gönderilir.
Implicit Grant
Implicit yetkilendirme Authorization Code yetkilendirmeye benzer adımlara sahiptir. Ancak Authorization Code ile yetkilendirme sırasında yetkilendirme kodu sunucu ile Authorization Server arasında dolaşırken Implicit yetkilendirmede yetkilendirmeyi temsil eden access token vardır ve bu access token User Agent(internet tarayıcı) ile Authorization Server arasında dolaşır. Yani yetkilendirme kodu olan access token açık bir ortamda dolaşmaktadır. Bu nedenle Imlicit yetkilendirmeler Public Clienttüründeki uygulamalarda kullanılır. Örneğin javascript uygulamaları gibi.
Client Application yetkilendirme sırasında sadece Client IDbilgisini Authorization Server’a gönderir. Client Secret bilgisini göndermez. Aksi taktirde bu bilgiler üçüncü şahısların eline geçebilir.
Resource Owner Password Credentials
Access token elde etmek için kullanıcı adı ve şifre gibi bilgilerinin doğrudan gönderilerek yetki alma işlemi sırasında kullanılır. Bu yöntem Resource Owner ile Client arasında çok güvenilir bir ortam olduğunda tercih edilmelidir. Aksi taktirde güvenlik riskleri çok yüksek olacaktır.
Client Credentials
Client Credentials yetkilendirme türü kullanılırken uygulama(Client Application) kendine ait kimlik bilgilerini (Client ID ve Client Secret) Authorization Server’a göndererek access token bilgisini elde eder.
Bu tür yetkilendirmeler kullanıcı bilgilerini gerektirmeyen makineler arası haberleşme(machine-to-machine) gibi uygulamalarda tercih edilebilir. Bir makinenin yerine getireceği görevleri bir API üzerinden okuması veya yazması buna örnek olabilir. Ya da kullanıcı iznini gerektirmeyen kaynak kullanımlarında tercih edilebilir.
Client Credentials yetkilendirmesi sadece Client ID ve Client Secret bilgilerini gerekli kılarken, Resource Owner Password Credentials yetkilendirmesi doğrudan kullanıcının şifresini istemektedir.
OAuth 2.0 protokolü ile ilgili bir önceki yazıda OAuth 2.0 rollerini incelemiştik. Bu rollerden Application Client rölü, veri kaynağına erişmek amacıyla yetkilendirilen bir uygulamadır. Bu uygulama OAuth için kısaca Client şeklinde de adlandırılabilir. Veri kaynağına erişmek isteyen uygulamalar Mobil, Web Site, Jvascript/SPA (Single Page Applicaiton) veya Desktop şeklinde bir birinden farklı yapıda olabilmektedir. Altyapı ve işleyiş açısından farklılık arz eden bu uygulamalar için OAuth 2.0 protokolünde özel türler ve profiller belirlenmiştir.
Client Types (Client Türleri)
OAuth 2.0 protokolü için iki tür client tanımlanmıştır.
Confidential (Gizli)
Public (Açık)
Confidential Client kendi kimlik gizliliğini muhafaza edebilen yapıdaki uygulamalardır. Uygulama güvenli bir sunucu üzerinde barındırılır. Kimlik bilgileri Authorization Server tarafından önceden alınır ve uygulamaya kaydedilir verilir. Buna örnek olarak bir web site uygulamasını verebiliriz. Sunucuya yönetici haricinde kimse erişip client şifrelerine ulaşamaz. Public Client kendi kimlik bilgilerini üzerinde güvenli bir şekilde muhafaza edemeyen uygulamalardır. Örneğin mobil, desktop uygulamaları üzerinde şifrelerin tutulması sakıncalıdır. Uygulamanın kodları bir şekilde kırıldığında kimlik bilgileriniz dolandırıcıların eline geçebilir. Benzer şekilde Javascript uygulamalarında kimlik bilgilerinin tutulması, tarayıcıda kaynağın görüntülenmesiyle ulaşılabilir olduğundan dolayı sakıncalıdır.
Client Profiles (Client Profilleri)
Client uygulamalar için OAuh 2.0 protokolünde üç farklı profili belirlenmiştir.
Bu profil bilgileri uygulama altyapısına göre belirlenmiş olup platform bağımsızdır.
Web Application
Web Application profiline sahip uygulamalar sunucu üzerinde çalışan uygulamalardır. Bu tür uygulamalarda sunucu(server) ve istemci(client) şeklinde iki taraf vardır. Sunucu, web sayfasını oluşturan(render eden) taraftır. İstemci ise internet tarayıcısında web sayfasını görüntüleyen taraftır. Örneğin asp.net web forms, asp.net mvc uygulaması veya java jsf uygulaması gibi uygulamalardır.
Bu tür uygulamalar Confidential Client uygulama türündedir. Web Application profilindeki uygulamaların sunucu tarafı admin yetkisinde bulunduğundan bu kısıma üçüncü şahısların dışarıdan erişmesi söz konusu değildir. Eğer bir Web Application üzerinden bir Reource Server’a erişmek isteniyorsa uygulamaya(client) ait kimli bilgileri (id, şifre gibi) sunucu üzerinde tutulur. Böylece kimlik bilgileri gizlenmiş olur.
User Agent
User Agent profilindeki uygulamalar tamamen internet tarayıcısı üzerinde çalışan uygulamalarıdır. User Agent uygulamaları da Web uygulamaları gibi sunucu üzerinde barındırılır. Ancak uygulama, internet tarayıcısına bir kez indirilir ve indirildikten sonra tarayıcı üzerinde çalışmaya başlar. Kaynak (Resource Server) üzerinden ihtiyaç duyulan veriler http, https veya ws gibi protokoller üzerinden talep edilir.
Günümüzde User Agent uygulamalarına en iyi örnek javascript uygulamalarıdır. Bir kaç yıl öncesine kadar Java Flex, Microsoft Silverlight ve Adobe Flash uygulamlar da User Agent açısından önemli bir yere sahipti. Fakat bu tür uygulamaların çalışması için platform bağımlılığını gerektiren bir takım ek yazılımlar gerektiğinden ve mobil cihazlarda uyum sorunu ortaya çıktığından dolayı artık bunların yerine Javascript tercih edilmektedir.
Bu tür uygulamalar Public Client uygulama türündedir. User Agent profilindeki uygulamaların kaynağı internet tarayıcısından görüntülenebildiği için bu uygulamalar üzerinde kullanıcı adı veya şifre gibi kimlik bilgileri muhafaza edilmez.
Native
Native profilindeki uygulamalar, kişisel bilgisayarlar ve mobil cihazlar üzerinde çalışan uygulamalardır. Örneğin Desktop, Android, iOS, Windows Mobile gibi uygulamalar Native profilli uygulamalardır. Bu tür uygulamalar doğrudan cihazlara yüklenerek çalışırlar.
Native uygulamalar Public Client uygulama türündedir. Kişisel cihazlara erişim açık olduğundan dolayı uygulamaların kodlarının kırılması durumunda uygulama kimlik bilgilerine erişmek mümkündür.
Bir önceki yazıda OAuth 2.0 protokolünü gelen bakış şeklinde incelemiştik. Bu yazıda OAuth 2.0 protokolüne ait rolleri incelemeye çalışacağız. Protokolde dört farklı rol bulunmaktadır. Bunlar:
Roller aslında protokol dahilinde birbirleri ile haberleşecek olan taraflardır diyebiliriz. Bu taraflar kişi veya uygulamalar olabilir. Yani her bir rolün fiziki veya mantıksal bir karşılığı vardır. Rollerin bu bağlamda topolojik olarak dizilimi aşağıdaki şekilde gösterilmiştir.
Resim Kanak: http://tutorials.jenkov.com/images/oauth2/overview-roles.png
Grafikte ifade edildiği üzere Resource Owner sadece Client Application ile iletişim kurmaktadır. Client Application ise yetki almak için Authorization Server ile, aldığı yetki neticesinde kaynağa erişmek için Resource Server ile iletişim kurmaktadır. Yine grafikte görüldüğü üzere Resource Server ile Authorization Server arasında bir iletişim söz konusudur. Bu iletişim Client Application access token ile Resource Server tarafına her talepte bulunduğunda access token doğrulamasının yapılması için gerçekleştirilir.
Resource Owner
Reource Owner, verinin sahibi olan kişi veya uygulamadır. Örneğin Facebook veya Instagram kullanıcıları sistemdeki verilerin gerçek sahipleri olduklarından birer Resource Owner’dır. Sunucuların birbirleri ile veri alış verişi yaptığı durumlarda ise Resource Owner bir insan yerine bir uygulama olmaktadır.
Resource Server
Mahrem verinin tutulduğu sunuculardır. Yani veri kaynağı sunucusudur. Örneğin Twitter uygulamasının tweet akışı için yayın yaptığı sunucular birer Resource Server’dır. Her önüne gelen size ait özel bilgileri buradan okuyamaz.
Client Application
Resource Server üzerindeki verilere erişmek üzere talepte bulunan uygulamalara Client Application denir. Örneğin kişisel blog sayfanızda Flickr üzerindeki resimlerinizi yayınlamak istiyorsanız blog sayfanız Flickr uygulaması için Client Application olacaktır. Bu durumda Resource Owner da siz olursunuz.
Authorization Server
Veri kaynağına (Resource Server) ulaşmak isteyen istemci uygulamaları(Client Applications) yetkilendirir. Authorization Server ve Resource Server aynı sunucu üzerinde veya farklı sunucular üzerinde olabilir. Farklı sunucular üzerinde bulunması iletişim açısından teknik olarak bir sorun teşkil etmez.
Bir istemci uygulamanın Authorization Server tarafından yetkilendirilebilmesi için istemci uygulamaya ait adres bilgileri Authorization Server tarafına kaydedilmelidir. Yani Authorization Server, hangi uygulamayı tanıyıp yetkilendireceğini bilmelidir.
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.
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.
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.
Resource owner
Client Application
Authorization Server
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:
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: