﻿
{"id":18166,"date":"2020-10-10T11:04:39","date_gmt":"2020-10-10T11:04:39","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=18166"},"modified":"2020-10-10T11:04:39","modified_gmt":"2020-10-10T11:04:39","slug":"identityserver4-yazi-serisi-1-identityserver4-nedir-oauth-2-0-ve-openid-connect-protokolleri-nelerdir","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/identityserver4-yazi-serisi-1-identityserver4-nedir-oauth-2-0-ve-openid-connect-protokolleri-nelerdir\/","title":{"rendered":"IdentityServer4 Yaz\u0131 Serisi #1 &#8211; IdentityServer4 Nedir? OAuth 2.0 ve OpenID Connect Protokolleri Nelerdir?"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu i\u00e7eri\u011fimizde IdentityServer4 Yaz\u0131 Serisinin, konuya dair teorik temellerini ataca\u011f\u0131m\u0131z ilk makalesini kaleme al\u0131yor olacak ve IdentityServer4&#8217;\u00fcn ne oldu\u011funa, bunun yan\u0131nda OAuth 2.0 ve OpenID protokollerinin neler oldu\u011funa ve her ikisinin hangi paydada birle\u015fti\u011fine de\u011finece\u011fiz. Serimizin devam\u0131nda ise IdentityServer4&#8217;\u00fcn hangi problemlere yahut senaryolardaki ihtiya\u00e7lara \u00e7\u00f6z\u00fcm getirdi\u011fine de\u011finerek ataca\u011f\u0131m\u0131z sa\u011flam teori \u00fczerine pratiksel \u00e7al\u0131\u015fmalar ger\u00e7ekle\u015ftirece\u011fiz. O halde buyrun ba\u015flayal\u0131m&#8230;<\/p>\n<h3 style=\"color:#e83e8c;\">IdentityServer4 Nedir?<\/h3>\n<p>A\u00e7\u0131k ya da kapal\u0131 bir sistem d\u00fc\u015f\u00fcnelim. Her sistem, t\u00fcr\u00fc ne olursa olsun mevcut d\u00fczenini korumaya dair bir i\u00e7g\u00fcd\u00fc ile hareket etmektedir. Buradaki temel ama\u00e7, sistemdeki verilerin s\u0131z\u0131nt\u0131lara kar\u015f\u0131 korunmas\u0131n\u0131 sa\u011flamak ve bunun i\u00e7in d\u0131\u015f eri\u015fimi kesmek yahut kontroll\u00fc hale getirmek ve olabildi\u011fince y\u00f6netilebilirli\u011fi sa\u011flamakt\u0131r diyebiliriz. Olay\u0131 yaz\u0131l\u0131msal a\u00e7\u0131dan de\u011ferlendirirsek e\u011fer geli\u015ftirilen her bir uygulama \u00f6z\u00fcnde bu refleksi benimsemekte ve uygulamadaki verileri d\u0131\u015f d\u00fcnyaya kar\u015f\u0131 korumay\u0131 ama\u00e7 edinmektedir. Yahut varsa t\u00fcketecek d\u0131\u015f kaynak ilgili uygulama taraf\u0131nca tan\u0131mlanm\u0131\u015f\/onaylanm\u0131\u015f\/do\u011frulanm\u0131\u015f olmas\u0131n\u0131 tercih etmektedir. Bunun i\u00e7in y\u00fcksek \u00f6l\u00e7ekli kullan\u0131c\u0131 denetim mekanizmalar\u0131 \u00fcretilmekte veya k\u00fct\u00fcphaneler kullan\u0131lmaktad\u0131r.<\/p>\n<p>Biliyorsunuz ki, server side geli\u015ftirilen bir web uygulamas\u0131nda kullan\u0131c\u0131 denetimleri genellikle Cookie, Session gibi aparatlar sayesinde ger\u00e7ekle\u015ftirilmektedir.<span style=\"font-size:10px;\">(Bknz: <a href=\"https:\/\/www.gencayyildiz.com\/blog\/asp-net-core-identity-yazi-dizisi\/\" rel=\"noopener noreferrer\" target=\"_blank\">Asp.NET Core Identity \u2013 Yaz\u0131 Dizisi<\/a>)<\/span> Bunlar\u0131n d\u0131\u015f\u0131nda Client Side geli\u015ftirilen uygulamalarda ise <a href=\"https:\/\/www.gencayyildiz.com\/blog\/asp-net-core-3-1-ile-token-bazli-kimlik-dogrulamasi-ve-refresh-token-kullanimijwt\/\" rel=\"noopener noreferrer\" target=\"_blank\">Json Web Token(JWT)<\/a> tabanl\u0131 denetimler tercih edilmektedir. T\u00fcm bunlardaki ama\u00e7 sistemi d\u0131\u015f d\u00fcnyaya kar\u015f\u0131 korumak ve d\u0131\u015f d\u00fcnyadaki t\u00fcketicileri tan\u0131ml\u0131\/bilinir hale getirmektir.<\/p>\n<p>Uygulamalardaki veri g\u00fcvenli\u011fi, geli\u015fen teknolojilerde veriye eri\u015fip i\u015flemek isteyen farkl\u0131 cihazlar\u0131n yahut clientlar\u0131n olmas\u0131ndan dolay\u0131 ayr\u0131 bir boyut kazanm\u0131\u015f bulunmaktad\u0131r. Bu clientlar; ayn\u0131 \u00f6zellikte olabilecekleri gibi farkl\u0131 altyap\u0131lara sahip, farkl\u0131 dillerle geli\u015ftirilmi\u015f ve farkl\u0131 cihazlar olabilir. Bu \u015fekilde veri t\u00fcketicisinin fazla oldu\u011fu durumlarda bizler i\u00e7in g\u00fcvenlik ekstra maliyetli hale gelmektedir. San\u0131r\u0131m bu durumu bir \u00f6rnekle somutla\u015ft\u0131rmak en do\u011frusu olacakt\u0131r.<\/p>\n<p style=\"color:gray;\">\n<em>&#8216;X&#8217; bankas\u0131 olarak hizmet veren bir bankan\u0131n geli\u015ftirdi\u011fi Web API \u00fczerinden kullan\u0131c\u0131lar\u0131n bakiye, bor\u00e7, har\u00e7 vs. gibi bilgilerine eri\u015filebildi\u011fini d\u00fc\u015f\u00fcnelim. Bu API&#8217;\u0131 t\u00fcketecek olan client&#8217;lar\u0131n; SPA(Single Page Application), Web Application, Mobile Application ve bir ba\u015fka Web API oldu\u011funu varsayal\u0131m. Eee g\u00fcn\u00fcm\u00fczde bir uygulama tek bir projeden ibaret olmamakta, bir veya birden fazla projenin ili\u015fkisi sonucu meydana gelmektedir. Dolay\u0131s\u0131yla &#8216;X&#8217; bankas\u0131n\u0131n geli\u015ftirdi\u011fi Web API&#8217;\u0131 t\u00fcketecek bu client&#8217;lar\u0131n birbirlerinden farkl\u0131 olmas\u0131 g\u00fcn\u00fcm\u00fczde gayet do\u011fal bir durumdur. Velhas\u0131l&#8230; Bu client&#8217;lar\u0131n X API ile olan eri\u015fim d\u00fczeylerinin ve kullan\u0131c\u0131 denetimlerinin, her birinin altyap\u0131s\u0131na uygun bir \u015fekilde ve ihtiyaca binaen farkl\u0131 davran\u0131\u015flarda eri\u015fim y\u00f6ntemleri benimsenerek, her bir uygulamada ayr\u0131 ayr\u0131 kodlanarak geli\u015ftirilmesi gerekecektir. Bu geli\u015ftirme s\u00fcreci her bir client i\u00e7in ger\u00e7ekle\u015ftirilece\u011finden dolay\u0131 haddinden fazla bir maliyet s\u00f6z konusu olacakt\u0131r. Hatta ileriki s\u00fcre\u00e7lerde sisteme yeni bir client&#8217;\u0131n eklenmesi durumunda ka\u00e7\u0131n\u0131lmaz olarak o client&#8217;\u0131n g\u00fcvenlik teknolojisine g\u00f6re geli\u015ftirme ve yap\u0131lanma tekrar ele al\u0131nmak mecburiyetinde kal\u0131nacak ve bu maliyet her daim potansiyel olarak bir k\u00f6\u015fede duracakt\u0131r. <u>\u0130\u015fte b\u00f6yle bir durumda X API&#8217;\u0131 t\u00fcketecek client&#8217;lar i\u00e7in merkezi bir Authentication ve Authorization i\u015flemlerini \u00fcstlenecek uygulamaya ihtiya\u00e7 duyulmaktad\u0131r.<\/u><\/em>\n<\/p>\n<p>\u0130\u015fte bu misalden yola \u00e7\u0131karsak, bir uygulamaya eri\u015fim g\u00f6sterecek t\u00fcm client&#8217;lar i\u00e7in authentication ve authorization sorumlulu\u011funu \u00fcstlenecek uygulamaya ihtiyac\u0131m\u0131z oldu\u011fu kanaatine varmaktay\u0131z. Burada devreye IdentityServer4 girmektedir. Lakin IdentityServer4&#8217;\u00fcn ne oldu\u011funa ve ihtiyac\u0131n\u0131n tam olarak nerelerde hissedildi\u011fine de\u011finmeden \u00f6nce <em><strong>OAuth 2.0<\/strong><\/em> ve <em><strong>OpenID Connect<\/strong><\/em> protokolleri \u00fczerinde bilgi sahibi olunmas\u0131 gerekmektedir.<\/p>\n<h4 style=\"color:purple;\">OAuth 2.0 Nedir?<\/h4>\n<p>Uygulamalar aras\u0131 veri transferinde kullan\u0131lan a\u00e7\u0131k bir yetkilendirme(authorization) protokol\u00fcd\u00fcr. OAuth2 deste\u011fi ile geli\u015ftirilen bir uygulama ile yetkilendirilen kullan\u0131c\u0131 ilgili protokol sayesinde ba\u015fka bir uygulaman\u0131n veri kayna\u011f\u0131na eri\u015febilmektedir. Bu duruma genellikle <a href=\"https:\/\/www.gencayyildiz.com\/blog\/asp-net-core-identity-facebook-login\/\" rel=\"noopener noreferrer\" target=\"_blank\">Facebook Login<\/a>, <a href=\"https:\/\/www.gencayyildiz.com\/blog\/asp-net-core-identity-google-login\/\" rel=\"noopener noreferrer\" target=\"_blank\">Google Login<\/a> vs. gibi sosyal medya odakl\u0131 login i\u015flemleri \u00f6rnek verilebilmektedir. Buradaki mant\u0131k, OAuth2 protokol\u00fcn\u00fc kullanan ilgili sosyal medyalar \u00fczerinden yap\u0131lan giri\u015f talebi neticesinde yine OAuth2 protokol\u00fcn\u00fc kullanan ve bu protokol\u00fc kullanan uygulamalara g\u00fcvenen client&#8217;a bir JWT verilmekte ve ilgili client taraf\u0131ndan bu token do\u011frulanabilmektedir. \u0130\u015fte bu hizmeti OAuth2 protokol\u00fc sa\u011flamaktad\u0131r.<\/p>\n<blockquote style=\"color:orange;\"><p><em>OAuth2 protokol\u00fc sadece yetkilendirme(authorization) i\u00e7in kullan\u0131lan bir protokold\u00fcr.<\/em><\/p><\/blockquote>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/10\/IdentityServer4-Yazi-Serisi-1-IdentityServer4-Nedir-OAuth-2.0-ve-OpenID-Connect-Protokolleri-Nelerdir.0-ve-OpenID-Connect-Protokolleri-Nelerdir.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/10\/IdentityServer4-Yazi-Serisi-1-IdentityServer4-Nedir-OAuth-2.0-ve-OpenID-Connect-Protokolleri-Nelerdir.0-ve-OpenID-Connect-Protokolleri-Nelerdir-300x150.png\" alt=\"IdentityServer4 Yaz\u0131 Serisi #1 - IdentityServer4 Nedir OAuth 2.0 ve OpenID Connect Protokolleri Nelerdir.0 ve OpenID Connect Protokolleri Nelerdir\" width=\"300\" height=\"150\" class=\"alignleft size-medium wp-image-18187\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/10\/IdentityServer4-Yazi-Serisi-1-IdentityServer4-Nedir-OAuth-2.0-ve-OpenID-Connect-Protokolleri-Nelerdir.0-ve-OpenID-Connect-Protokolleri-Nelerdir-300x150.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/10\/IdentityServer4-Yazi-Serisi-1-IdentityServer4-Nedir-OAuth-2.0-ve-OpenID-Connect-Protokolleri-Nelerdir.0-ve-OpenID-Connect-Protokolleri-Nelerdir.png 739w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a>Yandaki g\u00f6rseli incelerseniz e\u011fer; client(soldaki), farkl\u0131 bir uygulama olan API&#8217;a(sa\u011fdaki) eri\u015febilmek i\u00e7in t\u00fcm eri\u015fim yetkisini &#8216;OAuth Service&#8217; isimli projeden(ortadaki) almaktad\u0131r. \u0130\u015fte burada bir uygulamadan al\u0131nan yetkiyi ba\u015fka bir uygulamada kullanmam\u0131z\u0131 sa\u011flayan teknoloji OAuth 2.0 protokol\u00fcd\u00fcr.<\/p>\n<p>Bu y\u00f6ntemle kullan\u0131c\u0131 API&#8217;a eri\u015febilme yetkisi i\u00e7in kullan\u0131c\u0131 ad\u0131 ve \u015fifresini client&#8217;a vermek zorunda kalmayacak, direkt olarak &#8216;Auth Service&#8217; \u00fczerinden ilgili client ad\u0131na yetkiyi alacak ve eri\u015fimi sa\u011flayacakt\u0131r. B\u00f6ylece kullan\u0131c\u0131daki g\u00fcvensizlik ortadan kalkmakta ve \u015fifreyi herhangi bir client ile payla\u015fmak zorunda kal\u0131nmamaktad\u0131r.<\/p>\n<p>G\u00f6rsele yeniden gelecek olursak e\u011fer &#8216;Auth Service&#8217; client taraf\u0131ndan yap\u0131lan eri\u015fim talebi neticesinde geriye bir JWT d\u00f6nd\u00fcrecektir. Bu JWT sayesinde client, API&#8217;a eri\u015fim sa\u011flayabilmektedir.<\/p>\n<p>OAuth 2.0&#8217;\u0131n bir ba\u015fka getirisi ise client ile resource(kaynak API) aras\u0131ndaki yetkilendirme konfig\u00fcrasyonunu sa\u011flamas\u0131d\u0131r. Yani client, &#8216;OAuth Service&#8217; uygulamas\u0131ndan API&#8217;a dair hangi bilgileri ve yetkileri istedi\u011fini bildirebilir. Burada onaylay\u0131c\u0131 merci kullan\u0131c\u0131 olacakt\u0131r. G\u00fcnl\u00fck hayattaki internet kullan\u0131m\u0131n\u0131zda herhangi bir web uygulamas\u0131nda &#8216;Facebook \u00dczerinden Giri\u015f Yap&#8217; y\u00f6ntemiyle elbette ki oturum a\u00e7m\u0131\u015fs\u0131n\u0131zd\u0131r. Oturum a\u00e7arken Facebook&#8217;un sizi \u015f\u00f6yle bir pencere ile uyard\u0131\u011f\u0131n\u0131 hat\u0131rlay\u0131n\u0131z&#8230;<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2014\/06\/asp.net-facebook-login-9.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2014\/06\/asp.net-facebook-login-9-300x256.png\" alt=\"\" width=\"300\" height=\"256\" class=\"aligncenter size-medium wp-image-2786\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2014\/06\/asp.net-facebook-login-9-300x256.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2014\/06\/asp.net-facebook-login-9.png 490w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><br \/>\n\u0130\u015fte burada kullan\u0131c\u0131 olarak OAuth 2.0 protokol\u00fc sayesinde Facebook \u00fczerinden giri\u015f yapmak istedi\u011finiz client&#8217;\u0131n Facebook&#8217;tan istedi\u011fi yetkilerin onay\u0131 sizlere sunulmakta, &#8216;Tamam&#8217; dedi\u011finiz taktirde yetkiyi client&#8217;a vermi\u015f ve g\u00fcvenli bir eri\u015fime m\u00fcsade etmi\u015f olmaktas\u0131n\u0131z. Yap\u0131sal olarak kullan\u0131c\u0131n\u0131n verdi\u011fi yetkileri ve bilgileri i\u00e7erisinde bar\u0131nd\u0131ran bir access token de\u011feri client&#8217;a g\u00f6nderilmekte ve client ilgili API&#8217;\u0131 bu yetkilendirilmi\u015f token ile t\u00fcketmektedir.<\/p>\n<p>Ayr\u0131ca kullan\u0131c\u0131n\u0131n yetkilerle birlikte hangi verilerini payla\u015ft\u0131\u011f\u0131n\u0131 da bilmesi ve buna iradesiyle karar vermesi <em>Ki\u015fisel Verileri Koruma Kanunu<\/em> a\u00e7\u0131s\u0131ndan olduk\u00e7a yasal bir s\u00fcre\u00e7 olacakt\u0131r.<\/p>\n<blockquote><p><em style=\"color:orange;\">OAuth 2.0 protokol\u00fc, kullan\u0131c\u0131 bilgilerinin client&#8217;larla payla\u015f\u0131lmaks\u0131z\u0131n ana kaynaktan g\u00fcvenli bir \u015fekilde data al\u0131nmas\u0131n\u0131 sa\u011flayarak ki\u015fisel verilerin k\u00f6t\u00fc niyetli insanlar\u0131n eline ge\u00e7mesi ihtimaline \u00e7\u00f6z\u00fcm getirmektedir.<\/em><\/p><\/blockquote>\n<p><strong>OAuth 2.0 protokol\u00fcn\u00fc kullanan pop\u00fcler uygulamalar<\/strong><\/p>\n<ul>\n<li><em>Facebook<\/em><\/li>\n<li><em>Google<\/em><\/li>\n<li><em>E-Devlet<\/em><br \/>\n\u00d6SYM Aday \u0130\u015flemleri Sistemi(<a href=\"https:\/\/ais.osym.gov.tr\/\" rel=\"noopener noreferrer\" target=\"_blank\">ais.osym.gov.tr<\/a>), \u0130nteraktif Vergi Dairesi(<a href=\"https:\/\/ivd.gib.gov.tr\" rel=\"noopener noreferrer\" target=\"_blank\">ivd.gib.gov.tr<\/a>) gibi uygulamalar E-Devlet \u00fczerinden authorization olabilmektedir.\n<\/li>\n<\/ul>\n<p><strong>OAuth 2.0 protokol\u00fc neden kullan\u0131lmal\u0131d\u0131r?<\/strong><\/p>\n<p>Bunu g\u00fcn\u00fcm\u00fcze dair olas\u0131 bir tehlikeli duruma istinaden cevaplamakta fayda g\u00f6rmekteyim. G\u00fcn\u00fcm\u00fczde Facebook, Instagram vs. gibi sosyal medyalar\u0131 yahut Hepsiburada, Amazon, Gittigidiyor, N11 vs. gibi e-ticaret uygulamalar\u0131n\u0131 tek elden y\u00f6netim ama\u00e7l\u0131 entegrasyonel uygulamalar mevcuttur. Bu uygulamalara i\u015fletmenizle ilgili t\u00fcm sosyal medya ve e-ticaret hesap bilgilerinizi veriyor(username, password vs.) ard\u0131ndan tek elden i\u015fletmenize dair ilgili t\u00fcm alanlar\u0131 y\u00f6netti\u011finizi d\u00fc\u015f\u00fcn\u00fcyorsunuz. Tabi ki de bu d\u00fc\u015f\u00fcncede hakl\u0131 yanlar\u0131n\u0131z olabilir lakin kulland\u0131\u011f\u0131n\u0131z entegrasyon firmas\u0131n\u0131n sahibi, \u00e7al\u0131\u015fan\u0131 hi\u00e7 olmad\u0131 u\u00e7an ku\u015fu k\u00f6t\u00fc niyetli \u00e7\u0131kabilir ve sizin sisteme y\u00fckledi\u011finiz t\u00fcm hesap bilgilerinizi elde edip i\u015fletmenize dair her t\u00fcrl\u00fc mahcubiyeti do\u011furabilecek geri d\u00f6n\u00fc\u015fs\u00fcz hamlelerde bulunabilir. \u015eahsen, i\u015flevsel a\u00e7\u0131dan bu \u015fekilde kullan\u0131c\u0131n\u0131n \u00f6zel bilgilerine ihtiyac\u0131 olan uygulamalara kar\u015f\u0131 bir kere daha yaratabilece\u011fi olumlu olumsuz etkilerinin d\u00fc\u015f\u00fcn\u00fclmesini \u00f6neririm. Lakin bu uygulama sizden ilgili sosyal medyalar\u0131n ve e-ticaret sitelerinin hesap bilgilerini istemeden OAuth 2.0 protokol\u00fcn\u00fc kullanarak authorization i\u015flemini ger\u00e7ekle\u015ftiriyorsa g\u00f6n\u00fcl rahatl\u0131\u011f\u0131yla tercih edilebilir.<\/p>\n<p><strong>OAuth 2.0 protokol\u00fcnde kullan\u0131lan terimler nelerdir?<\/strong><\/p>\n<ul>\n<li><em><u>Resource Owner<\/u><\/em> : Veriyi elde eden son kullan\u0131c\u0131d\u0131r. Kaynak sahibi user.\n<\/li>\n<li><em><u>Client Application<\/u><\/em> : Resource Owner ad\u0131na korumal\u0131 veri kaynaklar\u0131na eri\u015fen uygulamad\u0131r. SPA(Single Page Application), Web API, Mobile, Tablet, Ak\u0131ll\u0131 \u00dct\u00fc vs.\n<\/li>\n<li><em><u>Resource Server<\/u><\/em> : Kaynak sa\u011flayan API&#8217;lard\u0131r.\n<\/li>\n<li><em><u>Authorization Server<\/u><\/em> : Yetki ve eri\u015fimi y\u00f6neten uygulamad\u0131r. Identity Server&#8217;da denmektedir.\n<\/li>\n<\/ul>\n<blockquote><p><em style=\"color:orange;\">OAuth 2.0 protokol\u00fc, kullan\u0131c\u0131 yetkilendirme ama\u00e7l\u0131 de\u011fil, uygulama yetkilendirme ama\u00e7l\u0131d\u0131r. Bir uygulama taraf\u0131ndan do\u011frulanm\u0131\u015f kullan\u0131c\u0131lar\u0131n ba\u015fka bir uygulama taraf\u0131ndan da do\u011frulanm\u0131\u015f olarak kabul edilmesine dayan\u0131r.<\/em><\/p><\/blockquote>\n<h4 style=\"color:purple;\">OpenID Connect Nedir?<\/h4>\n<p>OpenID Connect, esas\u0131nda bir protokolden ziyade OAuth 2.0 \u00fczerinde kimlik do\u011frulama(authentication) i\u015flemlerini \u00fcstlenen bir katmand\u0131r. API dostu bir yap\u0131 sa\u011flamakta ve i\u015flemleri basit tutarak JWT kullan\u0131m\u0131n\u0131 kolayla\u015ft\u0131rmaktad\u0131r.<\/p>\n<blockquote><p><em style=\"color:pink;\">OpenID Connect, kullan\u0131c\u0131 ile ilgili i\u015flemlerden sorumluyken, OAuth 2.0 ise yetkilendirme i\u015flemlerinden sorumludur. Dolay\u0131s\u0131yla OAuth 2.0 ile OpenID Connect birbirlerini tamamlayan iki protokold\u00fcr.<\/em><\/p><\/blockquote>\n<div id=\"attachment_18204\" style=\"width: 885px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/10\/IdentityServer4-Yazi-Serisi-1-IdentityServer4-Nedir-OAuth-2.0-ve-OpenID-Connect-Protokolleri-Nelerdir.0-ve-OpenID-Connect-Protokolleri-Nelerdir.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-18204\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/10\/IdentityServer4-Yazi-Serisi-1-IdentityServer4-Nedir-OAuth-2.0-ve-OpenID-Connect-Protokolleri-Nelerdir.0-ve-OpenID-Connect-Protokolleri-Nelerdir.jpg\" alt=\"IdentityServer4 Yaz\u0131 Serisi #1 - IdentityServer4 Nedir OAuth 2.0 ve OpenID Connect Protokolleri Nelerdir.0 ve OpenID Connect Protokolleri Nelerdir\" width=\"875\" height=\"363\" class=\"size-full wp-image-18204\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/10\/IdentityServer4-Yazi-Serisi-1-IdentityServer4-Nedir-OAuth-2.0-ve-OpenID-Connect-Protokolleri-Nelerdir.0-ve-OpenID-Connect-Protokolleri-Nelerdir.jpg 875w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/10\/IdentityServer4-Yazi-Serisi-1-IdentityServer4-Nedir-OAuth-2.0-ve-OpenID-Connect-Protokolleri-Nelerdir.0-ve-OpenID-Connect-Protokolleri-Nelerdir-300x124.jpg 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/10\/IdentityServer4-Yazi-Serisi-1-IdentityServer4-Nedir-OAuth-2.0-ve-OpenID-Connect-Protokolleri-Nelerdir.0-ve-OpenID-Connect-Protokolleri-Nelerdir-768x319.jpg 768w\" sizes=\"auto, (max-width: 875px) 100vw, 875px\" \/><\/a><p id=\"caption-attachment-18204\" class=\"wp-caption-text\">OpenID Connect protokol\u00fc ile OAuth 2.0 protokolleri aras\u0131ndaki ili\u015fki. \u00d6nce OpenID Connect ile authentication, ard\u0131ndan OAuth 2.0 ile authorization.<\/p><\/div>\n<p>Client taraf\u0131ndan Auth Service&#8217;e yap\u0131lan talep neticesinde User&#8217;a gelen onay ekran\u0131nda kullan\u0131c\u0131 bilgisiyle alakal\u0131 olan k\u0131s\u0131m OpenId Connect protokol\u00fcyle ilgiliyken, yetkilerle ilgili olan k\u0131s\u0131m ise OAuth 2.0 protokol\u00fcyle ilgili olacakt\u0131r.<\/p>\n<p>Evet&#8230; Bu noktaya kadar OAuth 2.0 ve OpenID Connect protokollerinin ne olduklar\u0131na ve ne amaca hizmet ettiklerine de\u011finmi\u015f olduk. \u015eimdi s\u0131ra t\u00fcm bu protokoller d\u0131\u015f\u0131nda IdentityServer4&#8217;\u00fcn ne oldu\u011funa ve hangi probleme \u00e7\u00f6z\u00fcm getirdi\u011fine de\u011finmeye gelmi\u015ftir.<\/p>\n<h4 style=\"color:purple;\">IdentityServer4 Nedir?<\/h4>\n<p>Bir uygulama \u00fczerinden farkl\u0131 uygulamalara yahut client&#8217;lara, authorization ve authentication gibi hizmetler vermek istiyorsan\u0131z e\u011fer ilgili uygulamada OAuth 2.0 ve OpenID Connect protokollerinin uygulanmas\u0131 gerekmektedir. IdentityServer4, OAuth 2.0 ve OpenID Connect protokollerini uygulaman\u0131za ayr\u0131 ayr\u0131 entegre etmek yerine kendisi bu sorumlulu\u011fu \u00fcstlenmekte ve ekstra kod yazmaks\u0131z\u0131n buradaki maliyeti d\u00fc\u015f\u00fcrmektedir.<\/p>\n<blockquote><p><em style=\"color:pink;\">IdentityServer4, OpenID Connect ve OAuth 2.0 protokollerini kullanarak, tek bir noktadan uygulamalar aras\u0131 kimliklendirme ve yetkilendirme kontrol\u00fc sa\u011flayan a\u00e7\u0131k kaynak(open source) bir framework&#8217;d\u00fcr.<\/em><\/p><\/blockquote>\n<p><strong>IdentityServer4&#8217;\u00fcn \u00f6zellikleri nelerdir?<\/strong><\/p>\n<ul>\n<li><u><em>Do\u011frulama Merkezi<\/em><\/u><br \/>\nWeb, mobil, native, service vs. gibi t\u00fcm uygulamalar i\u00e7in merkezi oturum a\u00e7ma mant\u0131\u011f\u0131 ve i\u015flevi olu\u015fturulabilir.\n<\/li>\n<li><u><em>Single Sign On\/Single Sign Out<\/em><\/u><br \/>\nBir\u00e7ok uygulama t\u00fcr\u00fcnde, bir noktadan oturum a\u00e7ma ve oturum kapatma i\u015flevselli\u011fi ger\u00e7ekle\u015ftirilebilir.\n<\/li>\n<li><u><em>API Eri\u015fim Kontrol\u00fc<\/em><\/u><br \/>\nSunucudan sunucuya, web uygulamalar\u0131, SPA(Single Page Application), native ve mobil uygulamalar gibi \u00e7e\u015fitli client&#8217;lar i\u00e7in API eri\u015fim kontrolleri sa\u011flanabilir.\n<\/li>\n<li><u><em>Federation Gateway<\/em><\/u><br \/>\nAzure Active Directory, Google, Facebook vs. gibi uygulamalar\u0131n harici kimlik sa\u011flay\u0131c\u0131lar\u0131n\u0131 destekler. B\u00f6ylece uygulaman\u0131z\u0131n bu harici sa\u011flay\u0131c\u0131lara nas\u0131l ba\u011flan\u0131laca\u011f\u0131n\u0131n ayr\u0131nt\u0131lar\u0131ndan sizi ar\u0131nd\u0131rm\u0131\u015f olur.\n<\/li>\n<li><u><em>Customize(\u00d6zelle\u015ftirme)<\/em><\/u><br \/>\nIdentityServer4&#8217;\u00fcn en \u00f6nemli \u00f6zelli\u011fidir diyebiliriz. G\u00fcnl\u00fck hayatta ya\u015fan\u0131labilen bir\u00e7ok senaryoya kar\u015f\u0131 IdentityServer4 \u00f6zelle\u015ftirilebilmektedir.<\/p>\n<blockquote><p><em style=\"color:pink;\">IdentityServer4, haz\u0131r bir product yahut Saas(Software as a Service) olmad\u0131\u011f\u0131ndan dolay\u0131 senaryoya uygun olarak uyarlanabilmektedir.<\/em><\/p><\/blockquote>\n<\/li>\n<li><u><em>Open Source<\/em><\/u><br \/>\nIdentityServer4 open source bir framework&#8217;t\u00fcr. Ticari \u00fcr\u00fcnlerde kullan\u0131labilmesi yasald\u0131r.\n<\/li>\n<li><u><em>Destek<\/em><\/u><br \/>\nYa\u015fan\u0131lan problemlerde yahut yard\u0131ma ihtiya\u00e7 oldu\u011fu taktirde IdentityServer4 yetkilileri sizlere \u00fccretsiz bilgi deste\u011fi sa\u011flamaktad\u0131r.\n<\/li>\n<\/ul>\n<p><strong>IdentityServer4 \u00e7al\u0131\u015fmalar\u0131nda kullan\u0131lan terimler nelerdir?<\/strong><\/p>\n<ul>\n<li><u><em>Client Uygulamalar\u0131<\/em><\/u> : Kullan\u0131c\u0131lar\u0131n kulland\u0131klar\u0131 g\u00fcvenli veri kaynaklar\u0131na(API) eri\u015fmek isteyen uygulamalard\u0131r.<\/li>\n<li><u><em>User<\/em><\/u> : Kaynaklara eri\u015fmek i\u00e7in client&#8217;\u0131 kullanan ki\u015fidir.<\/li>\n<li><u><em>Veri Kaynaklar\u0131(Resources)<\/em><\/u> : IdentityServer taraf\u0131ndan korunmas\u0131n\u0131 istedi\u011fimiz datalard\u0131r. Her kayna\u011f\u0131n bir ad\u0131 vard\u0131r ve istemciler eri\u015fmek istedikleri kayna\u011f\u0131 belirtmek i\u00e7in bu ad\u0131 kullan\u0131rlar. Kaynaklar genellikle Web API olarak tasarlan\u0131rlar ama bu tercihe ba\u011fl\u0131 oldu\u011fu i\u00e7in zorunlu de\u011fildir.<\/li>\n<li><u><em>IdentityServer<\/em><\/u> : Client uygulamalar\u0131na kar\u015f\u0131 OAuth 2.0 ve OpenID Connect protokollerini kullanarak g\u00fcvenli\u011fi sa\u011flar. Veri kaynaklar\u0131n\u0131 korur, kullan\u0131c\u0131<br \/>\nve client do\u011frulamas\u0131n\u0131 ger\u00e7ekle\u015ftirir ve oturumun a\u00e7\u0131l\u0131p kapanmas\u0131n\u0131 sa\u011flar. Ayr\u0131ca client uygulamalara identity ve access token \u00fcretiminden ve do\u011frulanmas\u0131ndan sorumludur.<\/li>\n<li><u><em>Identity Token<\/em><\/u> : Kimlik do\u011frulama i\u015fleminin sonucunda \u00fcretilen de\u011ferdir. Bir kullan\u0131c\u0131y\u0131 tan\u0131mlayan bilgilerle birlikte, kimli\u011fin ne zaman ve hangi y\u00f6ntemle do\u011fruland\u0131\u011f\u0131n\u0131 i\u00e7erir.<\/li>\n<li><u><em>Access Token<\/em><\/u> : Veri kaynaklar\u0131na(Resources) eri\u015fimi sa\u011flayan de\u011ferdir. Client&#8217;lar bu token de\u011feri e\u015fli\u011finde istekte bulunurlar. E\u011fer token do\u011frulan\u0131rsa veri kayna\u011f\u0131na eri\u015fim ger\u00e7ekle\u015fecek ve data elde edilecektir. Access Token, client ve kullan\u0131c\u0131 bilgileri i\u00e7erir. Veri kayna\u011f\u0131 olan API bu bilgileri kullanarak yetkilendirme(authorization) yapar ve verileri eri\u015fime a\u00e7ar.<\/li>\n<\/ul>\n<h4 style=\"color:purple;\">IdentityServer4 Taraf\u0131ndan Desteklenen \u00d6zellikler Nelerdir?<\/h4>\n<p>IdentityServer4 a\u015fa\u011f\u0131daki \u00f6zellikleri desteklemektedir;<br \/>\n<strong>OpenID Connect<\/strong><\/p>\n<ul>\n<li><a href=\"https:\/\/openid.net\/specs\/openid-connect-core-1_0.html\" rel=\"noopener noreferrer\" target=\"_blank\">OpenID Connect Core 1.0<\/a><\/li>\n<li><a href=\"https:\/\/openid.net\/specs\/openid-connect-discovery-1_0.html\" rel=\"noopener noreferrer\" target=\"_blank\">OpenID Connect Discovery 1.0<\/a><\/li>\n<li><a href=\"https:\/\/openid.net\/specs\/openid-connect-session-1_0.html\" rel=\"noopener noreferrer\" target=\"_blank\">OpenID Connect Session Management 1.0 &#8211; draft 22<\/a><\/li>\n<li><a href=\"https:\/\/openid.net\/specs\/openid-connect-logout-1_0.html\" rel=\"noopener noreferrer\" target=\"_blank\">OpenID Connect HTTP-based Logout 1.0 &#8211; draft 03<\/a><\/li>\n<\/ul>\n<p><strong>OAuth 2.0<\/strong><\/p>\n<ul>\n<li><a href=\"http:\/\/tools.ietf.org\/html\/rfc6749\" rel=\"noopener noreferrer\" target=\"_blank\">OAuth 2.0<\/a><\/li>\n<li><a href=\"https:\/\/tools.ietf.org\/html\/rfc6750\" rel=\"noopener noreferrer\" target=\"_blank\">OAuth 2.0 Bearer Token Usage<\/a><\/li>\n<li><a href=\"https:\/\/openid.net\/specs\/oauth-v2-multiple-response-types-1_0.html\" rel=\"noopener noreferrer\" target=\"_blank\">OAuth 2.0 Multiple Response Types<\/a><\/li>\n<li><a href=\"https:\/\/openid.net\/specs\/oauth-v2-form-post-response-mode-1_0.html\" rel=\"noopener noreferrer\" target=\"_blank\">OAuth 2.0 Form Post Response Mode<\/a><\/li>\n<li><a href=\"https:\/\/tools.ietf.org\/html\/rfc7009\" rel=\"noopener noreferrer\" target=\"_blank\">OAuth 2.0 Token Revocation<\/a><\/li>\n<li><a href=\"https:\/\/tools.ietf.org\/html\/rfc7662\" rel=\"noopener noreferrer\" target=\"_blank\">OAuth 2.0 Token Introspection<\/a><\/li>\n<li><a href=\"https:\/\/tools.ietf.org\/html\/rfc7636\" rel=\"noopener noreferrer\" target=\"_blank\">Proof Key for Code Exchange<\/a><\/li>\n<li><a href=\"https:\/\/tools.ietf.org\/html\/rfc7523\" rel=\"noopener noreferrer\" target=\"_blank\">JSON Web Tokens for Client Authentication<\/a><\/li>\n<\/ul>\n<p><strong>Sonu\u00e7<\/strong><br \/>\nBu i\u00e7eri\u011fimizde OAuth 2.0 ve OpenID Connect protokollerini izah ederek, bu protokoller \u00fczerine in\u015fa edilen IdentityServer4 framework&#8217;\u00fcn\u00fcn ne oldu\u011funa ve hangi problemlere \u00e7\u00f6z\u00fcm getirdi\u011fine genel bir \u015fekilde teorik temellendirmede bulunmu\u015f olduk. Sonraki i\u00e7eriklerimizde IdentityServer4 framework&#8217;\u00fcn\u00fcn \u00e7\u00f6z\u00fcm getirdi\u011fi problem senaryolar\u0131n\u0131 tek tek ele alacak ve ard\u0131ndan mimariyi pratik olarak de\u011ferlendirmeye ba\u015flayaca\u011f\u0131z.<\/p>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\nSonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Bu i\u00e7eri\u011fimizde IdentityServer4 Yaz\u0131 Serisinin, konuya dair teorik temellerini ataca\u011f\u0131m\u0131z ilk makalesini kaleme al\u0131yor olacak ve IdentityServer4&#8217;\u00fcn ne oldu\u011funa, bunun yan\u0131nda OAuth 2.0 ve OpenID protokollerinin neler oldu\u011funa ve her ikisinin hangi paydada&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":18168,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3826],"tags":[3836,3827,3828,3829,3831,3830,3833,3834,3832,3835,3146],"class_list":["post-18166","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-identityserver4","tag-client-application","tag-identityserver4","tag-identityserver4-nedir","tag-oauth-2-0","tag-oauth-2-0-nedir","tag-openid","tag-openid-connect","tag-openid-connect-nedir","tag-openid-nedir","tag-resource-owner","tag-resource-server"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/18166","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=18166"}],"version-history":[{"count":49,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/18166\/revisions"}],"predecessor-version":[{"id":18218,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/18166\/revisions\/18218"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/18168"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=18166"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=18166"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=18166"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}