﻿
{"id":27059,"date":"2024-07-15T09:19:01","date_gmt":"2024-07-15T09:19:01","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=27059"},"modified":"2024-07-15T09:19:01","modified_gmt":"2024-07-15T09:19:01","slug":"jwtjson-web-token-pasetoplatform-agnostic-security-tokens-kapsamli-karsilastirmasini-yapalim","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/jwtjson-web-token-pasetoplatform-agnostic-security-tokens-kapsamli-karsilastirmasini-yapalim\/","title":{"rendered":"JWT(JSON Web Token) &#038; PASETO(Platform-Agnostic Security Tokens) Kapsaml\u0131 Kar\u015f\u0131la\u015ft\u0131rmas\u0131n\u0131 Yapal\u0131m"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>G\u00fcn\u00fcm\u00fczde modern web uygulamalar\u0131n\u0131n g\u00fcvenlik yap\u0131lanmalar\u0131 token-based authentication&#8217;a dayanmakta ve bu, geleneksel session-based authentication&#8217;a nazaran daha geli\u015fmi\u015f bir yap\u0131lanma sa\u011flamaktad\u0131r. Bizler bu g\u00fcne kadar \u00e7e\u015fitli token yakla\u015f\u0131mlar\u0131 aras\u0131ndan basitli\u011fi, uygulama kolayl\u0131\u011f\u0131 ve en \u00e7okta pop\u00fclaritesi nedeniyle yayg\u0131n olarak JWT(JSON Web Token)&#8217;yi tercih etmi\u015f bulunmaktay\u0131z. Amma velakin bu \u00f6n kabuller do\u011frultusunda JWT yan\u0131nda olas\u0131 g\u00fcvenlik a\u00e7\u0131klar\u0131 gibi endi\u015feler getirmekte ve bu durum biz yaz\u0131l\u0131m geli\u015ftiricileri daha sa\u011flam alternatif aray\u0131\u015flar\u0131na s\u00fcr\u00fcklemektedir. Yapt\u0131\u011f\u0131m\u0131z g\u00f6zlemlerden ve kimi tecr\u00fcbeli yaz\u0131l\u0131mc\u0131lar\u0131n edindi\u011fi deneyimlerden yola \u00e7\u0131karak, PASETO(Platform-Agnostic Security Tokens)&#8217;nun, JWT&#8217;nin eksikliklerini do\u011frudan ele alan daha iyi bir \u00e7\u00f6z\u00fcm olarak ortaya \u00e7\u0131kt\u0131\u011f\u0131 ve daha g\u00fcvenli bir temel \u00fczerinden davran\u0131\u015f sergiledi\u011fi kanaatine varm\u0131\u015f bulunuyoruz. Haliyle bizler bu i\u00e7eri\u011fimizde PASETO ile JWT aras\u0131ndaki avantaj ve dezavantajlar\u0131 masaya yat\u0131racak ve b\u00f6ylece g\u00fc\u00e7l\u00fc ve zay\u0131f y\u00f6nlerini analiz ederek projelerde hangisinin tercih edilmesi gerekti\u011fine dair bilin\u00e7li kararlar verilebilmesi i\u00e7in do\u011fru bilgilerle zihinlerimizi donataca\u011f\u0131z ve biryandan da yap\u0131land\u0131rma s\u00fcre\u00e7lerini ele alarak kapsaml\u0131 bir kar\u015f\u0131la\u015ft\u0131rmada bulunaca\u011f\u0131z.<\/p>\n<p>\u0130lk olarak token-based authentication&#8217;\u0131n \u00e7al\u0131\u015fma mant\u0131\u011f\u0131n\u0131 ele alal\u0131m. Ard\u0131ndan bu mant\u0131k do\u011frultusunda JWT ve PASETO teknolojilerinin davran\u0131\u015flar\u0131n\u0131 detayland\u0131ral\u0131m. B\u00f6ylece iki yap\u0131 aras\u0131ndaki fark\u0131 daha rahat ortaya koyabilir ve isti\u015farelerimizi yapabiliriz.<\/p>\n<h3>Token-Based Authentication Nas\u0131l \u00c7al\u0131\u015fmaktad\u0131r?<\/h3>\n<p><div id=\"attachment_27064\" style=\"width: 310px\" class=\"wp-caption alignleft\"><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/07\/JWTJSON-Web-Token-PASETOPlatform-Agnostic-Security-Tokens-Kapsamli-Karsilastirmasini-Yapalim.webp\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-27064\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/07\/JWTJSON-Web-Token-PASETOPlatform-Agnostic-Security-Tokens-Kapsamli-Karsilastirmasini-Yapalim-300x188.webp\" alt=\"JWT(JSON Web Token) &amp; PASETO(Platform-Agnostic Security Tokens) Kapsaml\u0131 Kar\u015f\u0131la\u015ft\u0131rmas\u0131n\u0131 Yapal\u0131m\" width=\"300\" height=\"188\" class=\"size-medium wp-image-27064\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/07\/JWTJSON-Web-Token-PASETOPlatform-Agnostic-Security-Tokens-Kapsamli-Karsilastirmasini-Yapalim-300x188.webp 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/07\/JWTJSON-Web-Token-PASETOPlatform-Agnostic-Security-Tokens-Kapsamli-Karsilastirmasini-Yapalim.webp 720w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-27064\" class=\"wp-caption-text\">Token-Based Authentication Ak\u0131\u015f \u015eemas\u0131<\/p><\/div>Modern uygulamalarda kullan\u0131c\u0131lar\u0131n API&#8217;lere eri\u015fimini y\u00f6netmek i\u00e7in g\u00fcvenli ve verimli bir yol olarak tercih edilen token-based authentication yakla\u015f\u0131m\u0131, kullan\u0131c\u0131n\u0131n bir kere kimli\u011fi do\u011fruland\u0131ktan sonra bir token almas\u0131 ve bu token&#8217;\u0131 kullanarak eri\u015fim sa\u011flamas\u0131 davran\u0131\u015f\u0131na dayanmaktad\u0131r.<\/p>\n<p>Token-based authentication&#8217;\u0131n ak\u0131\u015f mant\u0131\u011f\u0131 ad\u0131m ad\u0131m \u015fu \u015fekildedir;<\/p>\n<ol>\n<li><em style=\"color:green;\"><strong>Kullan\u0131c\u0131 Giri\u015f Yapar<\/strong><\/em><br \/>\nKullan\u0131c\u0131, kullan\u0131c\u0131 ad\u0131 ve \u015fifre gibi kimlik bilgilerini kullanarak sunucuya giri\u015f talebinde bulunur.\n<\/li>\n<li><em style=\"color:green;\"><strong>Sunucu Kimli\u011fi Do\u011frular ve Token&#8217;\u0131 \u00dcretir<\/strong><\/em><br \/>\nSunucu, kullan\u0131c\u0131n\u0131n kimlik bilgilerini kontrol eder. E\u011fer kimlik do\u011frulama ba\u015far\u0131l\u0131ysa, bu kullan\u0131c\u0131ya \u00f6zel olarak tasarlanm\u0131\u015f ve kullan\u0131c\u0131n\u0131n kimli\u011finin ve eri\u015fim haklar\u0131n\u0131n g\u00fcvenli bir temsili olarak i\u015flev g\u00f6recek olan, i\u00e7erisinde kullan\u0131c\u0131 bilgilerini ve izinlerini i\u00e7eren benzersiz, dijital olarak imzalanm\u0131\u015f bir token olu\u015fturulur. \u0130\u015fte bu token genellikle JWT format\u0131nda olmaktad\u0131r.\n<\/li>\n<li><em style=\"color:green;\"><strong>Sunucu Token&#8217;\u0131 Kullan\u0131c\u0131ya G\u00f6nderir<\/strong><\/em><br \/>\nDo\u011frulaman\u0131n ba\u015far\u0131l\u0131 olmas\u0131 durumunda, sunucu bu token&#8217;\u0131 kullan\u0131c\u0131ya g\u00f6nderir.\n<\/li>\n<li><em style=\"color:green;\"><strong>Kullan\u0131c\u0131 Token&#8217;\u0131 Depolar<\/strong><\/em><br \/>\nKullan\u0131c\u0131 sunucudan edindi\u011fi token&#8217;\u0131 sonradan kullanabilmek i\u00e7in depolayacakt\u0131r. Bu i\u015flem genellikle browser \u00fczerinden local storage yahut session storage b\u00f6l\u00fcmlerinde ger\u00e7ekle\u015ftirilir. E\u011fer ki client bir web uygulamas\u0131 de\u011fil de mobil yahut masa\u00fcst\u00fc bir yaz\u0131l\u0131msa genellikle haf\u0131zada depolanarak saklama i\u015flemi ger\u00e7ekle\u015ftirilir.\n<\/li>\n<li><em style=\"color:green;\"><strong>Her \u0130stekte Token G\u00f6nderilir<\/strong><\/em><br \/>\nKullan\u0131c\u0131, korumal\u0131 bir kayna\u011fa yahut API&#8217;ye eri\u015fmek istedi\u011finde bu token&#8217;\u0131 HTTP request header&#8217;\u0131na Authorization key&#8217;i e\u015fli\u011finde ekler ve sunucuya g\u00f6nderir.\n<\/li>\n<li><em style=\"color:green;\"><strong>Sunucu Token&#8217;\u0131 Do\u011frular<\/strong><\/em><br \/>\nSunucu gelen isteklerdeki token de\u011ferlerini do\u011frular. E\u011fer token ge\u00e7erliyse sunucu iste\u011fi i\u015fler ve kullan\u0131c\u0131n\u0131n istedi\u011fi kayna\u011fa eri\u015fim izni verir. Yok e\u011fer ge\u00e7ersizse i\u015fte o taktirde eri\u015fim engellenir.\n<\/li>\n<li><em style=\"color:green;\"><strong>Token&#8217;\u0131n S\u00fcresi Dolabilir<\/strong><\/em><br \/>\nToken genellikle belirli bir s\u00fcre i\u00e7in ge\u00e7erli olu\u015fturulmaktad\u0131r. S\u00fcresi dolmu\u015f bir token ile yap\u0131lan istek neticesinde do\u011frulama sa\u011flanamayaca\u011f\u0131 i\u00e7in kayna\u011fa eri\u015fim ger\u00e7ekle\u015ftirilemez.\n<\/li>\n<\/ol>\n<p>\u015eimdi hususi olarak JWT ile PASETO&#8217;yu incelemeye ge\u00e7ebiliriz.<\/p>\n<h3>JWT Nedir? Nas\u0131l \u00c7al\u0131\u015fmaktad\u0131r?<\/h3>\n<p>JWT(JSON Web Token), iki sistem aras\u0131nda g\u00fcvenli bilgi al\u0131\u015fveri\u015fi i\u00e7in kullan\u0131lan, bilgilerin JSON format\u0131nda kodlan\u0131p dijital olarak imzaland\u0131\u011f\u0131 bir standartt\u0131r. Genellikle kimlik do\u011frulama, yetkilendirme ve \u00f6zel kaynaklara eri\u015fim izni s\u00fcre\u00e7lerinde s\u0131kl\u0131kla kullan\u0131lmaktad\u0131r. Herhangi bir merkezi otoriteye ba\u011f\u0131ml\u0131 olmamas\u0131, distributed sistemlerde kullan\u0131lmas\u0131n\u0131 kolayla\u015ft\u0131rmaktad\u0131r. Yap\u0131sal olarak i\u00e7eri\u011fimizin devam\u0131nda daha da detayland\u0131raca\u011f\u0131m\u0131z <em>Header<\/em>, <em>Payload<\/em> ve <em>Signature<\/em> olmak \u00fczere \u00fc\u00e7 ana bile\u015fenden olu\u015fmaktad\u0131r. \u015eimdi gelin JWT&#8217;yi bu yap\u0131ta\u015flar\u0131 \u00fczerinden inceleyelim;<\/p>\n<table>\n<thead>\n<tr>\n<th colspan=\"2\">Format<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td colspan=\"2\">\nJWT, yukar\u0131daki sat\u0131rlarda da bahsedildi\u011fi \u00fczere header, payload ve signature olmak \u00fczere \u00fc\u00e7 par\u00e7adan olu\u015fmaktad\u0131r. Bu par\u00e7alar, Base64url format\u0131nda kodlanmakta ve birbirlerinden nokta ile ayr\u0131lmaktad\u0131rlar.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/07\/JWTJSON-Web-Token-PASETOPlatform-Agnostic-Security-Tokens-Kapsamli-Karsilastirmasini-Yapalim.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/07\/JWTJSON-Web-Token-PASETOPlatform-Agnostic-Security-Tokens-Kapsamli-Karsilastirmasini-Yapalim-1024x600.png\" alt=\"JWT(JSON Web Token) &amp; PASETO(Platform-Agnostic Security Tokens) Kapsaml\u0131 Kar\u015f\u0131la\u015ft\u0131rmas\u0131n\u0131 Yapal\u0131m\" width=\"1024\" height=\"600\" class=\"aligncenter size-large wp-image-27067\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/07\/JWTJSON-Web-Token-PASETOPlatform-Agnostic-Security-Tokens-Kapsamli-Karsilastirmasini-Yapalim-1024x600.png 1024w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/07\/JWTJSON-Web-Token-PASETOPlatform-Agnostic-Security-Tokens-Kapsamli-Karsilastirmasini-Yapalim-300x176.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/07\/JWTJSON-Web-Token-PASETOPlatform-Agnostic-Security-Tokens-Kapsamli-Karsilastirmasini-Yapalim-768x450.png 768w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/07\/JWTJSON-Web-Token-PASETOPlatform-Agnostic-Security-Tokens-Kapsamli-Karsilastirmasini-Yapalim.png 1130w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"10%\" style=\"text-align:left;\"><strong>Header<\/strong><\/td>\n<td style=\"text-align:left;\">Header&#8217;da \u00fcretilen token&#8217;\u0131n t\u00fcr\u00fc ve imzalama algoritmas\u0131 belirtilmektedir.<\/td>\n<\/tr>\n<tr>\n<td width=\"10%\" style=\"text-align:left;\"><strong>Payload<\/strong><\/td>\n<td style=\"text-align:left;\">Token i\u00e7erisinde ta\u015f\u0131nacak olan kullan\u0131c\u0131 bilgileri, yetkiler vs. gibi t\u00fcm veriler payload k\u0131sm\u0131nda bulunmaktad\u0131r.<\/td>\n<\/tr>\n<tr>\n<td width=\"10%\" style=\"text-align:left;\"><strong>Signature<\/strong><\/td>\n<td style=\"text-align:left;\">Header ve Payload&#8217;n Base64url format\u0131nda kodlanarak, bir secret key ile imzalanm\u0131\u015f halidir.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h5>JWT&#8217;nin G\u00fcvenlik A\u00e7\u0131s\u0131ndan Endi\u015feleri Nelerdir?<\/h5>\n<p>JWT, bir\u00e7ok avantaj sunarken do\u011fru \u015fekilde uygulanmad\u0131\u011f\u0131 taktirde ortaya \u00e7\u0131kabilecek potansiyel tuzaklar ve g\u00fcvenlik endi\u015feleri s\u00f6z konusu olabilmektedir. Misal olarak, JWT imzalan\u0131rken algoritma se\u00e7iminde esneklik sa\u011flamaktad\u0131r ve bu esneklik &#8216;hi\u00e7biri&#8217; se\u00e7ene\u011fi de dahil olabilecek derecede geni\u015f s\u0131n\u0131rlara kadar dayanabilmektedir. E\u011fer ki geli\u015ftiriciler, uygulamalar\u0131n\u0131 yanl\u0131\u015fl\u0131kla imzas\u0131z JWT&#8217;leri kabul edecek \u015fekilde yap\u0131land\u0131r\u0131rlarsa i\u015fte bu durumda ciddi bir g\u00fcvenlik zafiyeti s\u00f6z konusu olabilmektedir.<\/p>\n<p>Bunun d\u0131\u015f\u0131nda JWT&#8217;ler stateless oldu\u011fu i\u00e7in oturum bilgisini tutmak i\u00e7in sunucu \u00fczerinde depolanmazlar. \u00c7\u00fcnk\u00fc bilindi\u011fi \u00fczere JWT&#8217;lerin ge\u00e7erlilik s\u00fcresi vard\u0131r. Hal b\u00f6yleyken bir kullan\u0131c\u0131 oturumunu kapatt\u0131\u011f\u0131 taktirde JWT ge\u00e7ersiz k\u0131l\u0131nm\u0131\u015f olmayacak ve s\u00fcresi bitene kadar hala kullan\u0131labilir olacakt\u0131r. \u0130\u015fte bu durumda JWT&#8217;leri ge\u00e7ersiz k\u0131lmak i\u00e7in geli\u015ftiriciler a\u00e7\u0131s\u0131ndan ekstradan u\u011fra\u015f gerecektir.<\/p>\n<h3>PASETO Nedir? Nas\u0131l \u00c7al\u0131\u015fmaktad\u0131r?<\/h3>\n<p>PASETO(Platform-Agnostic Security Tokens), yukar\u0131daki sat\u0131rlarda JWT ile ilgili bahsetti\u011fimiz endi\u015felerin aksine daha basit ve g\u00fcvenilir bir alternatiftir diyebiliriz. 2018 y\u0131l\u0131nda <em>Paragon Initiative Enterprises<\/em> taraf\u0131ndan tan\u0131t\u0131lm\u0131\u015ft\u0131r. Ta\u015f\u0131nabilir ve platformdan ba\u011f\u0131ms\u0131z bir \u015fekilde kullan\u0131lmak \u00fczere tasarlanm\u0131\u015f bir token yap\u0131s\u0131 sunmaktad\u0131r.<\/p>\n<p>PASETO davran\u0131\u015fsal olarak iki modda \u00e7al\u0131\u015fmaktad\u0131r;<\/p>\n<table>\n<thead>\n<tr>\n<th>Yerle\u015ftirilmi\u015f (Embedded) Mod<\/th>\n<th>D\u0131\u015fa Aktar\u0131labilir (Exportable) Mod<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Simetrik key&#8217;lerle \u00e7al\u0131\u015fan token olu\u015fturur.<\/td>\n<td>Asimetrik key&#8217;lerle \u00e7al\u0131\u015fan token olu\u015fturur.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Ayr\u0131ca PASETO, <em>Local Tokens<\/em> ve <em>Public Tokens<\/em> olmak \u00fczere iki farkl\u0131 token amac\u0131na sahip yakla\u015f\u0131m sergileyebilmektedir;<\/p>\n<table>\n<thead>\n<tr>\n<th width=\"50%\">Local Tokens<\/th>\n<th width=\"50%\">Puclic Tokens<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td width=\"50%\" style=\"vertical-align: text-top;\">Bu token&#8217;lar, state bilgisi oldu\u011fundan dolay\u0131 sunucu taraf\u0131ndan g\u00fcvenli bir \u015fekilde depolanabilmektedirler.<\/td>\n<td width=\"50%\" style=\"vertical-align: text-top;\">Bu token&#8217;lar ise t\u0131pk\u0131 JWT&#8217;de oldu\u011fu gibi stateless uygulamalar ve public-key cryptography i\u00e7eren durumlar i\u00e7in tasarlanm\u0131\u015ft\u0131r. Bundan dolay\u0131 sunucu taraf\u0131 depolamaya ihtiya\u00e7 duyulmaks\u0131z\u0131n g\u00fcvenli bir \u015fekilde iletilerek, do\u011frulanabilmektedirler.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>PASETO, hem local hem de puclic token&#8217;lar da a\u015fa\u011f\u0131daki gibi \u00fc\u00e7 b\u00f6l\u00fcmden olu\u015fan bir yap\u0131ya sahiptir;<\/p>\n<table>\n<thead>\n<tr>\n<th width=\"33%\">Header<\/th>\n<th width=\"33%\">Payload<\/th>\n<th width=\"33%\">Footer<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td width=\"33%\" style=\"vertical-align: text-top;\">Bu b\u00f6l\u00fcm, ad\u0131ndan da anla\u015f\u0131laca\u011f\u0131 \u00fczere ilgili token&#8217;\u0131n kullan\u0131lan \u015fifreleme algoritmas\u0131yla birlikte PASETO s\u00fcr\u00fcm\u00fcn\u00fc ve amac\u0131n\u0131(local&#038;public) tan\u0131mlar.<\/td>\n<td width=\"33%\" style=\"vertical-align: text-top;\">Token&#8217;da ki verileri i\u00e7erir.<\/td>\n<td width=\"33%\" style=\"vertical-align: text-top;\">Bu k\u0131s\u0131m ek meta verilerini ta\u015f\u0131mak i\u00e7in kullan\u0131labilir. Token&#8217;\u0131n do\u011frulama s\u00fcrecine dahil edilmedi\u011fi \u00f6zellikle bilinmelidir.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>PASETO t\u00fcm bu \u00f6zelliklerinin yan\u0131nda token&#8217;lar\u0131n \u015fifrelenmesi ve imzalanmas\u0131 i\u00e7in g\u00fcvenli kriptografik algoritmalardan istifade etmekte ve b\u00f6ylece token&#8217;lar\u0131n gizlili\u011fini koruyarak, b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc sa\u011flamaktad\u0131r.<\/p>\n<p>PASETO&#8217;nun JWT&#8217;ye nazaran g\u00fcvencesi, varsay\u0131lan olarak g\u00fcvenli olacak \u015fekilde tasarlanm\u0131\u015f olmas\u0131d\u0131r. Hat\u0131rlarsan\u0131z e\u011fer JWT&#8217;de ise g\u00fcvenlik tamamen developer taraf\u0131ndan do\u011fru yap\u0131land\u0131rmaya ba\u011fl\u0131d\u0131r. Hangi token yap\u0131s\u0131n\u0131 kullan\u0131rsan\u0131z kullan\u0131n PASETO&#8217;da g\u00fcvenlik uzmanlar\u0131 taraf\u0131ndan se\u00e7ilmi\u015f ve test edilmi\u015f belirli algoritmalar sabitlenmi\u015ftir ve aralar\u0131ndan birinin kullan\u0131lmas\u0131 elzemdir. B\u00f6ylece JWT&#8217;de ki algoritma belirtmeksizin kullan\u0131m durumu gibi bir zafiyet kesinlikle ortadan kald\u0131r\u0131lmakta ve biryandan da geli\u015ftiriciler a\u00e7\u0131s\u0131ndan yanl\u0131\u015f yahut g\u00fcvensiz se\u00e7eneklerin se\u00e7ilme ihtimali de t\u00f6rp\u00fclenerek g\u00fcvenilirlik durumu daha idealize hale getirilmi\u015f olmaktad\u0131r.<\/p>\n<p>Tabi burada token amac\u0131na g\u00f6re kullan\u0131lan algoritma yap\u0131lar\u0131nda da bir genelleme yap\u0131labilmektedir. \u015e\u00f6yle ki; local token&#8217;lar da genellikle tek bir secret key ile hem \u015fifreleme(encryption) hem de \u015fifre \u00e7\u00f6zme(decryption) s\u00fcreci seyretti\u011fi i\u00e7in <em>symmetric-key cryptography<\/em> kullan\u0131lmaktad\u0131r. Bu da bu token&#8217;lar\u0131 sunucu taraf\u0131 oturum y\u00f6netimi i\u00e7in uygun hale getirecektir. Benzer mant\u0131kla public token&#8217;lar da ise \u015fifreleme i\u00e7in bir public key ve \u015fifre \u00e7\u00f6zme i\u00e7in de private key i\u00e7eren <em>public-key cryptography<\/em> kullan\u0131lmaktad\u0131r. Bu da private key&#8217;i payla\u015fmaks\u0131z\u0131n g\u00fcvenli ileti\u015fim ve do\u011frulama yap\u0131lmas\u0131n\u0131 sa\u011flamaktad\u0131r.<\/p>\n<p>Anlayaca\u011f\u0131n\u0131z,<\/p>\n<p>JWT ve PASETO, her ikisi de g\u00fcvenli token olu\u015fturmak i\u00e7in kullan\u0131lan standartlard\u0131r. Ancak PASETO, g\u00fcvenlik ve basitlik a\u00e7\u0131s\u0131ndan daha avantajl\u0131d\u0131r. G\u00fcvenlikle ilgili avantaj\u0131 yukar\u0131daki sat\u0131rlarda konu\u015fmu\u015ftuk. Basitlik a\u00e7\u0131s\u0131ndan de\u011ferlendirmede bulunursak e\u011fer JWT&#8217;de \u00e7ok farkl\u0131 algoritmalar\u0131n kullan\u0131labilir olmas\u0131 developer kaynakl\u0131 hatalara sebebiyet verebilecekken, PASETO&#8217;da se\u00e7ilmi\u015f olan algoritmalar bu hata ihtimallerini t\u00f6rp\u00fclemektedir. Bu da basitlik ilkesi a\u00e7\u0131s\u0131ndan bir avantajd\u0131r \u015feklinde yorumlanabilir. Bunlar\u0131n yan\u0131nda, mevcut ekosistem ve destek a\u00e7\u0131s\u0131ndan JWT daha yayg\u0131n kullan\u0131lsada hangi standard\u0131n tercih edilmesi gerekti\u011fi projesine ve g\u00fcvenlik gereksinimlerine ba\u011fl\u0131 olarak de\u011fi\u015fkenlik g\u00f6sterir.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/07\/JWTJSON-Web-Token-PASETOPlatform-Agnostic-Security-Tokens-Kapsamli-Karsilastirmasini-Yapalim-1.webp\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/07\/JWTJSON-Web-Token-PASETOPlatform-Agnostic-Security-Tokens-Kapsamli-Karsilastirmasini-Yapalim-1.webp\" alt=\"JWT(JSON Web Token) &amp; PASETO(Platform-Agnostic Security Tokens) Kapsaml\u0131 Kar\u015f\u0131la\u015ft\u0131rmas\u0131n\u0131 Yapal\u0131m\" width=\"720\" height=\"451\" class=\"aligncenter size-full wp-image-27068\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/07\/JWTJSON-Web-Token-PASETOPlatform-Agnostic-Security-Tokens-Kapsamli-Karsilastirmasini-Yapalim-1.webp 720w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/07\/JWTJSON-Web-Token-PASETOPlatform-Agnostic-Security-Tokens-Kapsamli-Karsilastirmasini-Yapalim-1-300x188.webp 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/a><\/p>\n<h3>JWT \u0130le Token Based Authentication<\/h3>\n<p>JWT ile token-based authentication&#8217;a dair \u00f6nceki yaz\u0131lar\u0131m\u0131zda ya da youtube e\u011fitimlerimizde onlarca kez bilgi payla\u015fm\u0131\u015f bulunmaktay\u0131z. Bu i\u00e7eri\u011fimizi \u015fi\u015firmemek ad\u0131na bu kaynaklar\u0131 referans etmekle yetinece\u011fim;<\/p>\n<ul>\n<li><a href=\"https:\/\/www.gencayyildiz.com\/blog\/asp-net-core-3-1-ile-token-bazli-kimlik-dogrulamasi-ve-refresh-token-kullanimijwt\/\" rel=\"noopener\" target=\"_blank\">Asp.NET Core 3.1 ile Token Bazl\u0131 Kimlik Do\u011frulamas\u0131 ve Refresh Token Kullan\u0131m\u0131(JWT)<\/a><\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=FskhAwnZcO0&#038;t=2s\" rel=\"noopener\" target=\"_blank\">https:\/\/www.youtube.com\/watch?v=FskhAwnZcO0&#038;t=2s<\/a><\/li>\n<\/ul>\n<h3>PASETO \u0130le Token Based Authentication<\/h3>\n<p>PASETO ile token-based authentication i\u00e7in \u00f6ncelikle ilgili uygulamaya <a href=\"https:\/\/www.nuget.org\/packages\/Paseto.Core\" rel=\"noopener\" target=\"_blank\">Paseto.Core<\/a> k\u00fct\u00fcphanesinin y\u00fcklenmesi gerekmektedir.<\/p>\n<p>Ard\u0131ndan a\u015fa\u011f\u0131daki ad\u0131mlar e\u015fli\u011finde PASETO uygulama genelinde yap\u0131land\u0131r\u0131labilir.<\/p>\n<ul>\n<li><em style=\"color:green;\">Ad\u0131m 1 <span style=\"font-size:12px;color:black;\">GenerateToken &#8211; DecodeToken &#8211; ValidateToken Metotlar\u0131n\u0131n Olu\u015fturulmas\u0131<\/span><\/em><br \/>\nUygulamada PASETO token olu\u015fturabilmek, olu\u015fturulan bu token&#8217;\u0131 \u00e7\u00f6zebilmek ve do\u011frulayabilmek i\u00e7in a\u015fa\u011f\u0131daki gibi bir handler s\u0131n\u0131f\u0131 olu\u015fturulabilir;<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class PasetoHandler(IConfiguration configuration)\r\n    {\r\n        public object GenerateLocalToken()\r\n        {\r\n            var token = new PasetoBuilder()\r\n                .Use(ProtocolVersion.V1, Purpose.Local)\r\n                .WithKey(Encoding.UTF8.GetBytes(configuration&#x5B;&quot;Paseto:Key&quot;]), Encryption.SymmetricKey)\r\n                .AddClaim(&quot;name&quot;, &quot;gncy&quot;)\r\n                .AddClaim(&quot;role&quot;, &quot;mod&quot;)\r\n                .AddClaim(&quot;email&quot;, &quot;gyildizmail@gmail.com&quot;)\r\n                .AddFooter(&quot;tel : 05077519999&quot;)\r\n                .AddFooter(&quot;tel2 : 12345678901&quot;)\r\n                .Issuer(&quot;www.gencayyildiz.com&quot;)\r\n                .Subject(Guid.NewGuid().ToString())\r\n                .Audience(&quot;www.myapi.com&quot;)\r\n                .NotBefore(DateTime.UtcNow.AddMinutes(5))\r\n                .IssuedAt(DateTime.UtcNow)\r\n                .Expiration(DateTime.UtcNow.AddHours(1))\r\n                .TokenIdentifier(&quot;123456ABCD&quot;)\r\n                .Encode();\r\n\r\n            return new\r\n            {\r\n                Token = token\r\n            };\r\n        }\r\n        public object GeneratePublicToken()\r\n        {\r\n            using var rsa = new RSACryptoServiceProvider(2048);\r\n            var privateKey = rsa.ExportRSAPrivateKey();\r\n            var publicKey = rsa.ExportRSAPublicKey();\r\n\r\n            var token = new PasetoBuilder()\r\n                .Use(ProtocolVersion.V1, Purpose.Public)\r\n                .WithKey(privateKey, Encryption.AsymmetricSecretKey)\r\n                .AddClaim(&quot;name&quot;, &quot;gncy&quot;)\r\n                .AddClaim(&quot;role&quot;, &quot;mod&quot;)\r\n                .AddClaim(&quot;email&quot;, &quot;gyildizmail@gmail.com&quot;)\r\n                .AddFooter(&quot;tel : 05077519999&quot;)\r\n                .AddFooter(&quot;tel2 : 12345678901&quot;)\r\n                .Issuer(&quot;www.gencayyildiz.com&quot;)\r\n                .Subject(Guid.NewGuid().ToString())\r\n                .Audience(&quot;www.myapi.com&quot;)\r\n                .NotBefore(DateTime.UtcNow.AddMinutes(5))\r\n                .IssuedAt(DateTime.UtcNow)\r\n                .Expiration(DateTime.UtcNow.AddHours(1))\r\n                .TokenIdentifier(&quot;123456ABCD&quot;)\r\n                .Encode();\r\n\r\n            return new\r\n            {\r\n                Token = token,\r\n                PublicKey = Convert.ToBase64String(publicKey)\r\n            };\r\n        }\r\n\r\n        public PasetoToken DecodeLocalToken(string token)\r\n        {\r\n            var pasetoTokenValidationResult = new PasetoBuilder()\r\n                .Use(ProtocolVersion.V1, Purpose.Local)\r\n                .WithKey(Encoding.UTF8.GetBytes(configuration&#x5B;&quot;Paseto:Key&quot;]), Encryption.SymmetricKey)\r\n                .Decode(token);\r\n\r\n            var payload = pasetoTokenValidationResult.Paseto;\r\n            return payload;\r\n        }\r\n\r\n        public PasetoToken DecodePublicToken(string token, string publicKey)\r\n        {\r\n            var pasetoTokenValidationResult = new PasetoBuilder()\r\n                .Use(ProtocolVersion.V1, Purpose.Public)\r\n                .WithKey(Convert.FromBase64String(publicKey), Encryption.AsymmetricPublicKey)\r\n                .Decode(token);\r\n\r\n            var payload = pasetoTokenValidationResult.Paseto;\r\n            return payload;\r\n        }\r\n\r\n        public bool ValidateLocalToken(string token, out PasetoToken pasetoToken)\r\n        {\r\n            var pasetoTokenValidationResult = new PasetoBuilder()\r\n               .Use(ProtocolVersion.V1, Purpose.Local)\r\n               .WithKey(Encoding.UTF8.GetBytes(configuration&#x5B;&quot;Paseto:Key&quot;]), Encryption.SymmetricKey)\r\n               .Decode(token);\r\n\r\n            pasetoToken = pasetoTokenValidationResult.Paseto;\r\n\r\n            return pasetoTokenValidationResult.IsValid;\r\n        }\r\n\r\n        public bool ValidatePublicToken(string token, string publicKey, out PasetoToken pasetoToken)\r\n        {\r\n            try\r\n            {\r\n                var pasetoTokenValidationResult = new PasetoBuilder()\r\n                  .Use(ProtocolVersion.V1, Purpose.Public)\r\n                  .WithKey(Convert.FromBase64String(publicKey), Encryption.AsymmetricPublicKey)\r\n                  .Decode(token);\r\n\r\n                pasetoToken = pasetoTokenValidationResult.Paseto;\r\n\r\n                return pasetoTokenValidationResult.IsValid;\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                pasetoToken = null;\r\n                return false;\r\n            }\r\n        }\r\n    }\r\n<\/pre>\n<\/div>\n<p>G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere hem local token hem de puclic token olmak \u00fczere iki farkl\u0131 token yap\u0131s\u0131 \u00fczerinde \u00e7al\u0131\u015fma sergileyen helper tasarlam\u0131\u015f bulunuyoruz.\n<\/li>\n<li><em style=\"color:green;\">Ad\u0131m 2 <span style=\"font-size:12px;color:black;\">Uygulamada PASETO Authentication&#8217;\u0131n Handle Edilmesi<\/span><\/em><br \/>\nUygulamada authentication yap\u0131land\u0131rmas\u0131 olarak PASETO konfig\u00fcrasyonunu ger\u00e7ekle\u015ftirebilmek i\u00e7in de a\u015fa\u011f\u0131daki gibi bir handler s\u0131n\u0131f\u0131 olu\u015fturulabilir;<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class PasetoAuthenticationHandler : AuthenticationHandler&lt;AuthenticationSchemeOptions&gt;\r\n    {\r\n        readonly PasetoHandler _pasetoHandler;\r\n        public PasetoAuthenticationHandler(\r\n            IOptionsMonitor&lt;AuthenticationSchemeOptions&gt; options,\r\n            ILoggerFactory logger,\r\n            UrlEncoder encoder,\r\n            PasetoHandler pasetoHandler) : base(options, logger, encoder)\r\n        {\r\n            _pasetoHandler = pasetoHandler;\r\n        }\r\n\r\n        protected override Task&lt;AuthenticateResult&gt; HandleAuthenticateAsync()\r\n        {\r\n            if (!Request.Headers.ContainsKey(&quot;Authorization&quot;))\r\n                return Task.FromResult(AuthenticateResult.Fail(&quot;Authorization header not found.&quot;));\r\n\r\n            string? publicKey = null;\r\n            if (Request.Headers.ContainsKey(&quot;PublicKey&quot;))\r\n                publicKey = Request.Headers&#x5B;&quot;PublicKey&quot;]\r\n                    .ToString();\r\n\r\n            string token = Request.Headers&#x5B;&quot;Authorization&quot;]\r\n                .ToString()\r\n                .Replace(&quot;Bearer &quot;, string.Empty);\r\n\r\n\r\n            if (publicKey is null)\r\n            {\r\n                if (_pasetoHandler.ValidateLocalToken(token, out PasetoToken pasetoToken))\r\n                {\r\n                    var _claims = pasetoToken.Payload.Select(c =&gt; new { c.Key, c.Value });\r\n                    var _footer = pasetoToken.Footer;\r\n\r\n                    var claims = new&#x5B;] {\r\n                    new Claim(ClaimTypes.Name, pasetoToken.Payload&#x5B;&quot;name&quot;].ToString()),\r\n                    new Claim(ClaimTypes.Role, pasetoToken.Payload&#x5B;&quot;role&quot;].ToString())\r\n                };\r\n                    var identity = new ClaimsIdentity(claims, &quot;Paseto&quot;);\r\n                    var principal = new ClaimsPrincipal(identity);\r\n                    var ticket = new AuthenticationTicket(principal, &quot;Paseto&quot;);\r\n\r\n                    return Task.FromResult(AuthenticateResult.Success(ticket));\r\n                }\r\n                else\r\n                    return Task.FromResult(AuthenticateResult.Fail(&quot;Invalid token.&quot;));\r\n            }\r\n            else\r\n            {\r\n                if (_pasetoHandler.ValidatePublicToken(token, publicKey, out PasetoToken pasetoToken))\r\n                {\r\n                    var _claims = pasetoToken.Payload.Select(c =&gt; new { c.Key, c.Value });\r\n                    var _footer = pasetoToken.Footer;\r\n\r\n                    var claims = new&#x5B;] {\r\n                    new Claim(ClaimTypes.Name, pasetoToken.Payload&#x5B;&quot;name&quot;].ToString()),\r\n                    new Claim(ClaimTypes.Role, pasetoToken.Payload&#x5B;&quot;role&quot;].ToString())\r\n                };\r\n                    var identity = new ClaimsIdentity(claims, &quot;Paseto&quot;);\r\n                    var principal = new ClaimsPrincipal(identity);\r\n                    var ticket = new AuthenticationTicket(principal, &quot;Paseto&quot;);\r\n\r\n                    return Task.FromResult(AuthenticateResult.Success(ticket));\r\n                }\r\n                else\r\n                    return Task.FromResult(AuthenticateResult.Fail(&quot;Invalid token.&quot;));\r\n            }\r\n        }\r\n    }\r\n<\/pre>\n<\/div>\n<p>Burada g\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere gelen istek neticesinde bir token var m\u0131 yok mu kontrol edilmekte, oldu\u011fu taktirde gerekli authentication \u00e7al\u0131\u015fmas\u0131 y\u00fcr\u00fct\u00fclmektedir. Tabi biryandan da bu token&#8217;la birlikte public key geliyorsa e\u011fer bu token&#8217;\u0131n public token oldu\u011fu anla\u015f\u0131lmakta ve ona g\u00f6re validation davran\u0131\u015f\u0131 \u015fekillenmektedir.<\/p>\n<p>Ayr\u0131ca <strong>36<\/strong>&#8211;<strong>37.<\/strong> ve <strong>56<\/strong>&#8211;<strong>57.<\/strong> sat\u0131rlar\u0131ndaki claim yap\u0131land\u0131rmalar\u0131na odaklan\u0131l\u0131rsa, bunlar\u0131n JWT yap\u0131land\u0131rmas\u0131ndan al\u0131\u015f\u0131lagelen <code>NameClaimType<\/code> ve <code>RoleClaimType<\/code> konfig\u00fcrasyonlar\u0131na kar\u015f\u0131l\u0131k geldi\u011fi s\u00f6ylenebilir.\n<\/li>\n<li><em style=\"color:green;\">Ad\u0131m 3 <span style=\"font-size:12px;color:black;\">Bu Yap\u0131lar\u0131n Uygulamada Kullan\u0131lmas\u0131<\/span><\/em><br \/>\nVe son olarak yukar\u0131da geli\u015ftirilen bu yap\u0131lar a\u015fa\u011f\u0131daki gibi uygulamada kullan\u0131labilir ve b\u00f6ylece uygulaman\u0131n PASETO ile authentication s\u00fcreci ba\u015flat\u0131labilir;<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nvar builder = WebApplication.CreateBuilder(args);\r\n\r\nbuilder.Services.AddSingleton&lt;PasetoHandler&gt;();\r\nbuilder.Services.AddAuthentication(&quot;Paseto&quot;)\r\n    .AddScheme&lt;AuthenticationSchemeOptions, PasetoAuthenticationHandler&gt;(&quot;Paseto&quot;, null);\r\nbuilder.Services.AddAuthorization();\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseAuthentication();\r\napp.UseAuthorization();\r\n\r\napp.MapGet(&quot;\/&quot;, (HttpContext context, PasetoHandler pasetoHandler) =&gt;\r\n{\r\n    return Results.Ok();\r\n})\r\n    .RequireAuthorization(p =&gt; p.RequireRole(&quot;mod&quot;));\r\n\r\napp.MapGet(&quot;\/get-local-token&quot;, (PasetoHandler pasetoHandler) =&gt;\r\n{\r\n    return pasetoHandler.GenerateLocalToken();\r\n});\r\n\r\napp.MapGet(&quot;\/get-public-token&quot;, (PasetoHandler pasetoHandler) =&gt;\r\n{\r\n    return pasetoHandler.GeneratePublicToken();\r\n});\r\n\r\napp.Run();\r\n<\/pre>\n<\/div>\n<p>Burada da <strong>4<\/strong> ile <strong>6.<\/strong> sat\u0131r aral\u0131\u011f\u0131na odaklan\u0131l\u0131rsa, PASETO \u015femas\u0131nda authentication servisi eklenmekte ve bu s\u0131rada <code>AddScheme<\/code> fonksiyonuyla da biraz \u00f6nce olu\u015fturulan <code>PasetoAuthenticationHandler<\/code> devreye sokulmaktad\u0131r. Bu yap\u0131land\u0131rma neticesinde art\u0131k uygulaman\u0131n kimlik do\u011frulama kontrol\u00fc PASETO davran\u0131\u015f\u0131 \u00fczerinden y\u00fcr\u00fct\u00fclmektedir. Bu s\u00fcre\u00e7te test ama\u00e7l\u0131 g\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere \u00fc\u00e7 adet endpoint tan\u0131mlanm\u0131\u015ft\u0131r ve her biri ad\u0131ndan da anla\u015f\u0131laca\u011f\u0131 \u00fczere mahiyetine uygun i\u015flevler ger\u00e7ekle\u015ftirmektedir.\n<\/li>\n<\/ul>\n<p>\u0130\u015fte bu kadar&#8230; Bir uygulamada PASETO \u00fczerinden authentication yap\u0131land\u0131rmas\u0131 a\u015fa\u011f\u0131 yukar\u0131 bu \u015fekilde seyredecektir&#8230;<\/p>\n<h3>PASETO ve JWT Aras\u0131nda Se\u00e7im Yapmak<\/h3>\n<p>Yaz\u0131m\u0131z boyunca hem PASETO&#8217;nun hem de JWT&#8217;nin kendine \u00f6zg\u00fc avantaj ve dezavantajlar\u0131n\u0131 de\u011ferlendirmi\u015f bulunuyoruz. T\u00fcm bunlar\u0131 hesaba katt\u0131\u011f\u0131m\u0131zda a\u015fikard\u0131r ki hangisinin se\u00e7ilece\u011fi keyfilikten ziyade ihtiya\u00e7 ve \u00f6nceliklere ba\u011f\u0131ml\u0131l\u0131k g\u00f6stermektedir.<\/p>\n<p>\u00d6zellikle g\u00fcvenlik a\u00e7\u0131klar\u0131na kar\u015f\u0131 bir hassasiyet g\u00f6steriyor ve kritik bir \u00e7al\u0131\u015fma sergiliyorsan\u0131z tabi ki de JWT&#8217;ye nazaran PASETO daha uygun olacakt\u0131r.<\/p>\n<p>Ayr\u0131ca i\u015f mant\u0131\u011f\u0131 gere\u011fi farkl\u0131 mimarisel gereksinimlerin s\u00f6z konusu oldu\u011fu durumlarda da PASETO, local token ve public token \u00f6zellikleri sayesinde daha uyumlu bir davran\u0131\u015f sergileyebilir. \u00d6zellikle \u00fcretilen token \u00fczerinden oturum y\u00f6netimi gibi geleneksel bir durum i\u00e7in PASETO olduk\u00e7a idealdir diyebiliriz.<\/p>\n<p>T\u00fcm bunlar\u0131n d\u0131\u015f\u0131nda PASETO hen\u00fcz yeni bir standart oldu\u011fu i\u00e7in her ge\u00e7en an istikrarl\u0131k b\u00fcy\u00fcme ger\u00e7ekle\u015ftirsede k\u00fc\u00e7\u00fck bir ekosisteme sahiptir. Her platform i\u00e7in uygun k\u00fct\u00fcphanelerin bulunmas\u0131 ve bunlar\u0131n yap\u0131land\u0131rma kurallar\u0131na dair i\u00e7eriklere eri\u015filmesi JWT kadar pratik olmayabilir. <\/p>\n<p>\u0130\u015fte bu sebeplerden dolay\u0131 uygulamalar\u0131n\u0131z\u0131n g\u00fcvenli\u011fi i\u00e7in en do\u011fru yakla\u015f\u0131m ve teknolojileri ihtiya\u00e7 analizleriniz neticesinde iradenizle se\u00e7meniz gerekmektedir.<\/p>\n<p>Nihai olarak;<br \/>\nArt\u0131k \u015funu s\u00f6yleyebiliriz ki g\u00fcn\u00fcm\u00fcz de her \u015feyde oldu\u011fu gibi g\u00fcvenlik tehditlerinde de bir de\u011fi\u015fim ve hatta geli\u015fim s\u00f6z konusudur. Bundan dolay\u0131 uygulamalar\u0131m\u0131zda etkili kimlik do\u011frulama mekanizmalar\u0131na s\u00fcrekli artan bir ihtiya\u00e7 durumu vard\u0131r diyebiliriz. Hatta kuantum bilgisayarlar hali haz\u0131rda mevcut olan kriptografik algoritmalar\u0131 k\u0131rma konusunda olduk\u00e7a mahir olduklar\u0131 i\u00e7in art\u0131k bizlerin kuantum diren\u00e7li geli\u015ftirilmi\u015f olan algoritmalar\u0131 benimsememiz gerekmektedir. \u0130\u015fte PASETO, g\u00fcvenlik odakl\u0131 olmas\u0131ndan kaynakl\u0131 bu kritik neticesinde JWT&#8217;ye nazaran daha de\u011ferli bir konuma gelmektedir.<\/p>\n<p>\u0130htiya\u00e7 halinde kullanman\u0131z\u0131 ve faydalanman\u0131z\u0131 dilerim \ud83d\ude42<\/p>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle\u2026<br \/>\nSonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere\u2026<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar\u2026<\/p>\n<p>Not : \u00d6rnek \u00e7al\u0131\u015fmaya a\u015fa\u011f\u0131daki github adresinden eri\u015febilirsiniz.<br \/>\n<a href=\"https:\/\/github.com\/gncyyldz\/Token_Based_Authentication_With_PASETO\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/gncyyldz\/Token_Based_Authentication_With_PASETO<\/a><\/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, G\u00fcn\u00fcm\u00fczde modern web uygulamalar\u0131n\u0131n g\u00fcvenlik yap\u0131lanmalar\u0131 token-based authentication&#8217;a dayanmakta ve bu, geleneksel session-based authentication&#8217;a nazaran daha geli\u015fmi\u015f bir yap\u0131lanma sa\u011flamaktad\u0131r. Bizler bu g\u00fcne kadar \u00e7e\u015fitli token yakla\u015f\u0131mlar\u0131 aras\u0131ndan basitli\u011fi, uygulama kolayl\u0131\u011f\u0131 ve en&#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":27072,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4912,2668],"tags":[2609,2610,5071,2613,5072,5070,5069,5074,5073],"class_list":["post-27059","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-net-8","category-asp-net-core-2","tag-json-web-token","tag-jwt","tag-jwt-nasil-calismaktadir","tag-jwt-nedir","tag-paragon-initiative-enterprises","tag-paseto","tag-platform-agnostic-security-tokens","tag-public-key-cryptography","tag-symmetric-key-cryptography"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/27059","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=27059"}],"version-history":[{"count":8,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/27059\/revisions"}],"predecessor-version":[{"id":27073,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/27059\/revisions\/27073"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/27072"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=27059"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=27059"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=27059"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}