{"id":343,"date":"2020-07-03T15:25:23","date_gmt":"2020-07-03T15:25:23","guid":{"rendered":"http:\/\/144.76.171.171\/blog\/?p=343"},"modified":"2020-07-03T15:26:25","modified_gmt":"2020-07-03T15:26:25","slug":"jwtnin-hikayesi","status":"publish","type":"post","link":"https:\/\/berenkudaygorun.com\/blog\/blog\/2020\/07\/03\/jwtnin-hikayesi\/","title":{"rendered":"JWT&#8217;nin Hikayesi"},"content":{"rendered":"<p>Medium'da okudu\u011fum bir yaz\u0131y\u0131 \u00f6zetleyrek t\u00fcrk\u00e7ele\u015ftirmek istiyorum, i\u00e7erisinde \u00e7ok de\u011ferli bilgiler var ve JWT'ile \u00e7al\u0131\u015fan developer'lar\u0131n bilmesi gerekti\u011fini d\u00fc\u015f\u00fcn\u00fcyorum.<br \/>\nAPI d\u00fcnyas\u0131 ba\u015flad\u0131\u011f\u0131ndan beri JWT'nin kullan\u0131m\u0131 herke\u015f\u00e7e bilinir oldu art\u0131k hemen hemen b\u00fct\u00fcn e\u011fitim i\u00e7eriklerinde JWT'ye yer veriliyor ancak hikayesinden bahseden hen\u00fcz g\u00f6rmedim bununla alakal\u0131 videolu bir e\u011fitim i\u00e7eri\u011fi haz\u0131rlamak istiyorum bundan dolay\u0131 notlar\u0131m\u0131 \u015fimdiden haz\u0131rlamaya ba\u015flad\u0131m. Anlatmay\u0131 pland\u0131\u011f\u0131m konular\u0131 genel olarak isimlendirmek gerekirse:<\/p>\n<ol>\n<li>JWT'nin Hikayesi,<\/li>\n<li>JWT'nin Uygulanmas\u0131<\/li>\n<li>JWT Teknolojisine Siber G\u00fcvenlik Bak\u0131\u015f A\u00e7\u0131s\u0131yla Yakla\u015f\u0131m<br \/>\nYukar\u0131da bahsetti\u011fim e\u011fitim i\u00e7eri\u011finin birinci yaz\u0131s\u0131n\u0131 \u015fuanda okumaya ba\u015flad\u0131n\u0131z ve A'dan Z'ye JWT'nin do\u011fu\u015f hikayesine bakal\u0131m.<\/li>\n<\/ol>\n<h1>Giri\u015f<\/h1>\n<p>Kullan\u0131lan teknolojilerin b\u00fcy\u00fck bir \u00e7o\u011funlu\u011fu asl\u0131nda bir ihtiyac\u0131 gidermek \u00fczere do\u011fmu\u015ftur ve bu teknolojileri projelerimizde kullan\u0131rken asl\u0131nda do\u011fu\u015f hikayelerini bilmek bize \u00f6zg\u00fcven verecek ve motivasyon sa\u011flayacakt\u0131r. &quot;Herkes kafas\u0131na g\u00f6re teknoloji \u00e7\u0131kart\u0131yor, bu nedir b\u00f6yle!&quot; tarz\u0131 yakla\u015f\u0131mlardan vazge\u00e7meye \u00e7al\u0131\u015fmal\u0131y\u0131z biri bir \u015fey yapt\u0131ysa bir nedeni vard\u0131r \u015feklinde d\u00fc\u015f\u00fcn\u00fcp hikayesini ara\u015ft\u0131rmam\u0131z gerekmektedir. Peki JWT'nin hikayesi nedir? Bu asl\u0131nda HTTP servisinin en temeline dayanmaktad\u0131r. <\/p>\n<h1>Stateless<\/h1>\n<p>HTTP istekleri stateless'd\u0131r. Bu \u015fu anlama gelmekte sizin yapt\u0131\u011f\u0131n\u0131z istekle bir \u00f6nceki iste\u011finiz aras\u0131nda hi\u00e7bir mant\u0131ksal ili\u015fki bulunmamaktad\u0131r. \u0130ki istek kesinlikle birbirini tan\u0131maz. Bundan dolay\u0131 bir sisteme giri\u015f yapt\u0131\u011f\u0131n\u0131zda size cevap olarak cookie atamas\u0131 yap\u0131lacakt\u0131r. Bu cookie'ler kullan\u0131larak istek yapt\u0131\u011f\u0131n\u0131z sunucu sizi tan\u0131yacak ve giri\u015f i\u015flemi yapt\u0131\u011f\u0131n\u0131z sistemde istedi\u011finiz gibi dola\u015fabileceksiniz.<\/p>\n<blockquote>\n<p>\u00d6rnek olarak php ile yaz\u0131lm\u0131\u015f basit bir sayfa d\u00fc\u015f\u00fcnelim ve giri\u015f yapt\u0131\u011f\u0131n\u0131zda php bir session ba\u015flaacakt\u0131r. Bu session de\u011ferleri sunucun oldu\u011fu bilgisayarda her session'a \u00f6zg\u00fc hashlenmi\u015f dosyalarda saklanmaktad\u0131r. Size cevap olarak http header'lar\u0131 i\u00e7erisinde bu dosyan\u0131n ismi cookie olarak d\u00f6nmektedir. Sizde bu cookie'lerle sistemde istedi\u011finiz gibi dola\u015fabilirsiniz e\u011fer session'u \u00f6ld\u00fcrecek bir kod \u00e7al\u0131\u015ft\u0131r\u0131rsan\u0131z sunucu taraf\u0131nda ilgili dosya silinecektir.<\/p>\n<\/blockquote>\n<p>\u0130\u015fte bu teknoloji \u00e7\u00f6z\u00fcm\u00fcne Server Side Session denilmektedir ve m\u00fckemmel olmas\u0131na ra\u011fmen art\u0131k \u00e7a\u011f d\u0131\u015f\u0131d\u0131r. Burada biraz belki abartm\u0131\u015f olabilirim k\u00fc\u00e7\u00fck projelerde kullan\u0131labilir ancak kurumsal projelerde kullan\u0131lmamal\u0131d\u0131r. Neden \u00e7a\u011f d\u0131\u011f\u0131 diyoruz peki? <\/p>\n<p>B\u00fcy\u00fck bir projede trafi\u011finiz \u00e7ok yo\u011fun oldu\u011funda b\u00fcy\u00fck bir ihtimalle birden fazla sunucu kullanmak isteyeceksiniz. Bu durum teknolojik bir yakla\u015f\u0131m ancak baz\u0131 sorunlar\u0131 beraberinde getiriyor. Sunucular\u0131n\u0131z\u0131n \u00f6n\u00fcne bir Load-Balancer koydu\u011fumuzu d\u00fc\u015f\u00fcneli ve hangi sunucumuz daha m\u00fcsait durumdaysa LB iste\u011fi bu sunucuya y\u00f6nlendirecektir. Ancak A Suncusunda gir\u015f yapm\u0131\u015f birinin Server Side Session'\u0131 A suncuusunun i\u00e7ine yaz\u0131ld\u0131. Do\u011fal olarak B sunucusu bu cookie de\u011ferini tan\u0131mayacakt\u0131r ve kullan\u0131c\u0131n\u0131n oturumu d\u00fc\u015fecektir. \u015eimdi, elimizde bir problem var ve bu problemi \u00e7\u00f6zmemiz gerekmekte ve \u015fansl\u0131y\u0131z \u00e7\u00f6z\u00fcm\u00fcde var. B\u00fct\u00fcn oturum bilgilerinin tutuldu\u011fu bir sunucu aya\u011fa kald\u0131r\u0131l\u0131yor ve b\u00fct\u00fcn kontroller bu sunucu taraf\u0131ndan ger\u00e7ekle\u015ftiriliyor. Mimarinize sadece yeni bir sunucu eklemeniz ve konfig\u00fcre etmeniz yeterli olacakt\u0131r. Peki bu y\u00f6ntem do\u011fru mu? Bir\u00e7ok kurumsal projede bu y\u00f6ntemi g\u00f6rebilirsiniz ancak bu ekstra maliyet demek olacakt\u0131r i\u015fte JWT tamda burada devreye girmekte sizi ekstra bir sunucu y\u00fck\u00fcnden kurtaracakt\u0131r.<\/p>\n<h1>The Better Solution<\/h1>\n<p>A\u00e7\u0131k\u00e7as\u0131 okudu\u011fum makaledeki ba\u015fl\u0131\u011f\u0131 direkt olarak kopyalad\u0131m, okurken \u00e7ok heycanl\u0131yd\u0131m ve yeni bir ba\u015fl\u0131\u011fa ge\u00e7erken ba\u015fl\u0131\u011f\u0131 i\u00e7imden \u00e7ok vurgulu bir \u015fekilde okudum, bu tarz duygusal \u00e7\u0131k\u0131\u015flar okuduklar\u0131m\u0131n haf\u0131zama daha iyi kaydedilmesini sa\u011fl\u0131yor bundan dolay\u0131 ba\u015fl\u0131\u011f\u0131m\u0131z bu \ud83d\ude42<br \/>\nJSON Web Token yani JWT RFC7519 ile desteklenmektedir ve 3 k\u0131s\u0131mdan olu\u015fur, bunlar:<\/p>\n<ol>\n<li>the header;<\/li>\n<li>a payload or body;<\/li>\n<li>a signature;<\/li>\n<\/ol>\n<p>devam\u0131 gelecek...<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Medium&#8217;da okudu\u011fum bir yaz\u0131y\u0131 \u00f6zetleyrek t\u00fcrk\u00e7ele\u015ftirmek istiyorum, i\u00e7erisinde \u00e7ok de\u011ferli bilgiler var ve JWT&#8217;ile \u00e7al\u0131\u015fan developer&#8217;lar\u0131n bilmesi gerekti\u011fini d\u00fc\u015f\u00fcn\u00fcyorum. API d\u00fcnyas\u0131 ba\u015flad\u0131\u011f\u0131ndan beri JWT&#8217;nin kullan\u0131m\u0131&#8230;<\/p>\n<div class=\"more-link-wrapper\"><a class=\"more-link\" href=\"https:\/\/berenkudaygorun.com\/blog\/blog\/2020\/07\/03\/jwtnin-hikayesi\/\">Devam\u0131n\u0131 oku<span class=\"screen-reader-text\">JWT&#8217;nin Hikayesi<\/span><\/a><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[296],"tags":[300,299,298,297,301],"class_list":["post-343","post","type-post","status-publish","format-standard","hentry","category-teknoloji-hikayeleri","tag-cookie","tag-http","tag-json-web-token","tag-jwt","tag-session","entry"],"_links":{"self":[{"href":"https:\/\/berenkudaygorun.com\/blog\/wp-json\/wp\/v2\/posts\/343","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/berenkudaygorun.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/berenkudaygorun.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/berenkudaygorun.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/berenkudaygorun.com\/blog\/wp-json\/wp\/v2\/comments?post=343"}],"version-history":[{"count":1,"href":"https:\/\/berenkudaygorun.com\/blog\/wp-json\/wp\/v2\/posts\/343\/revisions"}],"predecessor-version":[{"id":344,"href":"https:\/\/berenkudaygorun.com\/blog\/wp-json\/wp\/v2\/posts\/343\/revisions\/344"}],"wp:attachment":[{"href":"https:\/\/berenkudaygorun.com\/blog\/wp-json\/wp\/v2\/media?parent=343"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/berenkudaygorun.com\/blog\/wp-json\/wp\/v2\/categories?post=343"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/berenkudaygorun.com\/blog\/wp-json\/wp\/v2\/tags?post=343"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}