﻿
{"id":9345,"date":"2018-09-16T08:26:57","date_gmt":"2018-09-16T08:26:57","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=9345"},"modified":"2018-09-16T08:26:57","modified_gmt":"2018-09-16T08:26:57","slug":"json-web-tokenjwt-nedir","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/json-web-tokenjwt-nedir\/","title":{"rendered":"JSON Web Token(JWT) Nedir?"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu i\u00e7eri\u011fimizde klasik oturum y\u00f6netimi ara\u00e7lar\u0131ndan olan Session yahut Cookie yap\u0131lar\u0131na alternatif RFC 7519 standart\u0131 JSON Web Token(JWT) \u00fczerine konu\u015fuyor olaca\u011f\u0131z.<\/p>\n<p>G\u00fcn\u00fcm\u00fczde RESTFull API&#8217;lar da oturum i\u015flemlerini eski usul Session yahut Cookie ara\u00e7lar\u0131yla de\u011fil JSON Web Token(JWT) ile ger\u00e7ekle\u015ftirmekteyiz. Daha do\u011frusu JWT ile oturum i\u015flemlerimizi icra etmeyi tercih etmekteyiz demem daha do\u011fru olacakt\u0131r. &#8220;<em><strong>Peki hoca, Session ya da Coockie neyimize yetmedi?<\/strong><\/em>&#8221; \u015feklinde sorunuzu duyar gibiyim&#8230;<\/p>\n<p>Evet&#8230; Bunca zamand\u0131r kulland\u0131\u011f\u0131m\u0131z Session, Cookie vs. gibi yap\u0131lar ihtiya\u00e7lar\u0131m\u0131za yeterince cevap verebilme kabiliyetine sahiptiler. Ama g\u00fcn\u00fcm\u00fczde internet trafi\u011finin yo\u011funla\u015fmas\u0131 ve kullan\u0131c\u0131 etkile\u015fiminin artmas\u0131ndan dolay\u0131 eskiye nazaran misliyle oturum i\u015flemleri ger\u00e7ekle\u015ftirilmektedir. Dolay\u0131s\u0131yla bu yo\u011funlukta bizlere performans ve maliyet a\u00e7\u0131s\u0131ndan ve t\u00fcm bunlar\u0131n yan\u0131nda h\u0131zl\u0131 i\u015flevsellikte olan yap\u0131lar gerekmektedir. \u0130\u015fte bundan dolay\u0131 eski teknolojilere nazaran JWT yap\u0131s\u0131 geli\u015ftirilmi\u015ftir.<\/p>\n<p>Mesela, olu\u015fturulan her bir session i\u00e7in arkaplanda ger\u00e7ekle\u015ftirilen IO i\u015flemlerinin artan yo\u011funlukta performans a\u00e7\u0131s\u0131ndan sunucuya ne kadar maliyetli oldu\u011funu d\u00fc\u015f\u00fcn\u00fcn&#8230; Ya da ayn\u0131 anda hem web hem de mobilde \u00e7al\u0131\u015fan ve tek bir API \u00fczerinden i\u015flevsellik g\u00f6steren uygulamalarda session bazl\u0131 oturum bilgilerini platformlar aras\u0131nda ta\u015f\u0131maya yeltenince kar\u015f\u0131la\u015f\u0131labilecek problemleri&#8230; \u0130\u015fte bu durumlara istinaden JWT&#8217;de hem IO i\u015flemlerinden yal\u0131t\u0131lm\u0131\u015fl\u0131k s\u00f6z konusuyken hem de platformlar aras\u0131nda oturum transferi hi\u00e7bir probleme mahal vermeksizin sadece token\u0131 ta\u015f\u0131makla sorunsuz ger\u00e7ekle\u015ftiriliyor.<\/p>\n<h3>Token &#8211; Session Kar\u015f\u0131la\u015ft\u0131rmas\u0131<\/h3>\n<table>\n<thead>\n<tr>\n<th>Session Login<\/th>\n<th>Token Login<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\n<strong>Client<\/strong> -> Siteyi a\u00e7.<br \/>\n<strong>Server<\/strong> -> SessionID ver.<br \/>\n<strong>Client<\/strong> -> UserName &#038; Password gir ve SessionID ile yolla.<br \/>\n<strong>Server<\/strong> -> Bilgileri kontrol et. Do\u011fru ise Session&#8217;a user bilgilerini set et. Y\u00f6nlendirmeyi ger\u00e7ekle\u015ftir.<br \/>\n<strong>Client<\/strong> -> Settings sayfas\u0131n\u0131 iste. SessionID g\u00f6nder.<br \/>\n<strong>Server<\/strong> -> SessionID i\u00e7in giri\u015f yapm\u0131\u015f kullan\u0131c\u0131 var m\u0131 kontrol et. Cevap ver.\n<\/td>\n<td>\n<strong>Client<\/strong> -> Siteyi a\u00e7.<br \/>\n<strong>Client<\/strong> -> UserName &#038; Password yolla.<br \/>\n<strong>Server<\/strong> -> Bilgileri kontrol et. Do\u011fru ise token olu\u015ftur ve Client&#8217;a yolla. Y\u00f6nlendirmeyi ger\u00e7ekle\u015ftir.<br \/>\n<strong>Client<\/strong> -> Settings sayfas\u0131n\u0131 iste. Token g\u00f6nder.<br \/>\n<strong>Server<\/strong> -> Token ge\u00e7erli mi kontrol et. Cevap ver.\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>T\u00fcm bunlar\u0131n yan\u0131nda token yap\u0131lanmas\u0131n\u0131n kendine has avantajlar\u0131da mevcuttur;<\/p>\n<ul>\n<li>Tokenlar cookie istemezler. Bundan dolay\u0131 mobil browserlar gibi cookie desteklemeyen platformlarda \u00e7al\u0131\u015fabilirler.<\/li>\n<li>Tokenler browsera \u00f6zel de\u011fildir. Dolay\u0131s\u0131yla, uygulamaya hangi platformdan login olunursa olunsun elde edilen token bir ba\u015fka platformda rahat\u00e7a kullan\u0131labilir.<\/li>\n<\/ul>\n<h3>Token&#8217;\u0131n Fiziksel Yap\u0131s\u0131<\/h3>\n<p>Token, oturumla ilgili kritik bilgilerin \u015fifrelendi\u011fi bir fotmatt\u0131r. Yap\u0131s\u0131 a\u015fa\u011f\u0131daki gibidir;<\/p>\n<blockquote><p>\n<strong><span style=\"text-align:middle;font-size:11px;\"><span style=\"color:red;\">eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9<\/span>.<span style=\"color:blue;\">eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ<\/span>.<span style=\"color:green;\">SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c<\/span>&#8220;<\/span><\/strong>\n<\/p><\/blockquote>\n<p>Yukar\u0131daki token \u00f6rne\u011fine yap\u0131sal olarak dikkat edilirse e\u011fer bir token\u0131n \u00fc\u00e7 b\u00f6l\u00fcmden olu\u015ftu\u011fu g\u00f6r\u00fclmektedir. Bu \u00fc\u00e7 alan\u0131n ne oldu\u011funu incelersek e\u011fer;<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"color:red;\">\n<strong>HEADER<\/strong><br \/>\n<em><span>&#8220;Algoritma &#038; Token Tipi&#8221;<\/span><\/em>\n<\/th>\n<th style=\"color:blue;\">\n<strong>PAYLOAD<\/strong><br \/>\n<em><span>&#8220;Veri&#8221;<\/span><\/em>\n<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n{\r\n  &quot;alg&quot;: &quot;HS256&quot;,\r\n  &quot;typ&quot;: &quot;JWT&quot;\r\n}\r\n<\/pre>\n<\/td>\n<td>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n{\r\n  &quot;sub&quot;: &quot;1234567890&quot;,\r\n  &quot;name&quot;: &quot;John Doe&quot;,\r\n  &quot;iat&quot;: 1516239022\r\n}\r\n<\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td>\nBa\u015fl\u0131klar, kullan\u0131lacak algoritma ve token tipi belirlenmektedir.\n<\/td>\n<td>\nOturum i\u00e7in ta\u015f\u0131nmas\u0131 gereken datalar bar\u0131nd\u0131r\u0131lmaktad\u0131r.(surname, password, id vs.)<br \/>\nKritik bilgiler ta\u015f\u0131nabilir.\n<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\"><\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\" style=\"color:green;\">\n<strong>VERIFY SIGNATURE<\/strong><br \/>\n<em><span>&#8220;\u0130mza&#8221;<\/span><\/em>\n<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\">\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nHMACSHA256(\r\n  base64UrlEncode(header) + &quot;.&quot; +\r\n  base64UrlEncode(payload),\r\n  your-256-bit-secret\r\n)\r\n<\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\">\nToken\u0131n imzas\u0131d\u0131r. \u0130ki parametre mevcuttur.<br \/>\n1. Header ve Payload alanlar\u0131n\u0131n BASE64 ile \u015fifrelenmi\u015f verileri.<br \/>\n2. Bizim taraf\u0131m\u0131zdan belirlenmi\u015f olan gizli anahtar.\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>T\u00fcm bu bilgilerin \u015fifrelenerek harmanlanm\u0131\u015f hali token yap\u0131s\u0131nda bir veriyi ortaya \u00e7\u0131karmakta ve bizler sadece o veriyi kullanarak t\u00fcm i\u015flemlerimizi ger\u00e7ekle\u015ftirebilmekteyiz.<\/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 klasik oturum y\u00f6netimi ara\u00e7lar\u0131ndan olan Session yahut Cookie yap\u0131lar\u0131na alternatif RFC 7519 standart\u0131 JSON Web Token(JWT) \u00fczerine konu\u015fuyor olaca\u011f\u0131z. G\u00fcn\u00fcm\u00fczde RESTFull API&#8217;lar da oturum i\u015flemlerini eski usul Session yahut Cookie ara\u00e7lar\u0131yla&#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":9376,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[780],"tags":[2614,2609,2612,2610,2613,2615,2611,2608,865,2616],"class_list":["post-9345","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-json","tag-header","tag-json-web-token","tag-json-web-token-nedir","tag-jwt","tag-jwt-nedir","tag-payload","tag-restful-api","tag-rfc-7519","tag-token","tag-token-nedir"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/9345","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=9345"}],"version-history":[{"count":31,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/9345\/revisions"}],"predecessor-version":[{"id":9377,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/9345\/revisions\/9377"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/9376"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=9345"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=9345"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=9345"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}