{"id":30375,"date":"2025-09-27T02:32:01","date_gmt":"2025-09-26T23:32:01","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/github-copilot-chat-ile-guvenli-kimlik-dogrulama-sistemi-kurulumu\/"},"modified":"2025-09-27T02:32:01","modified_gmt":"2025-09-26T23:32:01","slug":"github-copilot-chat-ile-guvenli-kimlik-dogrulama-sistemi-kurulumu","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/github-copilot-chat-ile-guvenli-kimlik-dogrulama-sistemi-kurulumu\/","title":{"rendered":"GitHub Copilot Chat ile G\u00fcvenli Kimlik Do\u011frulama Sistemi Kurulumu"},"content":{"rendered":"<p><body><\/p>\n<p>Modern web uygulamalar\u0131, kullan\u0131c\u0131 verilerini korumak ve ki\u015fiselle\u015ftirilmi\u015f deneyimler sunmak i\u00e7in g\u00fc\u00e7l\u00fc bir kimlik do\u011frulama sistemine ihtiya\u00e7 duyar. Peki, bu karma\u015f\u0131k s\u00fcreci GitHub Copilot Chat gibi yapay zeka destekli ara\u00e7larla nas\u0131l daha h\u0131zl\u0131, g\u00fcvenli ve hatas\u0131z hale getirebiliriz? Bu kapsaml\u0131 rehberde, s\u0131f\u0131rdan ba\u015flayarak tam te\u015fekk\u00fcll\u00fc bir kullan\u0131c\u0131 kimlik do\u011frulama sistemi in\u015fa etmenin inceliklerini, Copilot Chat&#8217;in g\u00fcc\u00fcn\u00fc kullanarak ad\u0131m ad\u0131m ke\u015ffedece\u011fiz.<\/p>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn dijital d\u00fcnyas\u0131nda, kullan\u0131c\u0131lar\u0131n web siteleri ve uygulamalarla etkile\u015fimi her ge\u00e7en g\u00fcn art\u0131yor. Online bankac\u0131l\u0131ktan e-ticarete, sosyal medya platformlar\u0131ndan bulut tabanl\u0131 ofis ara\u00e7lar\u0131na kadar her alanda ki\u015fisel verilerimizi payla\u015f\u0131yoruz. \u0130\u015fte tam da bu noktada, bir kullan\u0131c\u0131n\u0131n ger\u00e7ekten iddia etti\u011fi ki\u015fi oldu\u011funu do\u011frulamak, yani kimlik do\u011frulama (authentication) s\u00fcreci devreye giriyor. Bu s\u00fcre\u00e7, sadece bir g\u00fcvenlik bariyeri olmakla kalm\u0131yor, ayn\u0131 zamanda kullan\u0131c\u0131n\u0131n \u00f6zel bilgilerine yetkisiz eri\u015fimi engelleyerek veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc ve gizlili\u011fini sa\u011fl\u0131yor.<\/p>\n<p>Kimlik do\u011frulama olmadan bir uygulama d\u00fc\u015f\u00fcnmek, kilitli kap\u0131s\u0131 olmayan bir banka kasas\u0131na benzetilebilir. Herhangi bir ki\u015fi i\u00e7eri girebilir, istedi\u011fi i\u015flemi yapabilir ve kimse bunun fark\u0131na varmaz. Bu durum, hem kullan\u0131c\u0131lar\u0131n ki\u015fisel bilgilerinin (e-posta, \u015fifre, kredi kart\u0131 bilgileri vb.) \u00e7al\u0131nmas\u0131na neden olabilir hem de uygulama geli\u015ftiricileri i\u00e7in yasal ve itibari sorunlara yol a\u00e7abilir. \u00d6zellikle GDPR, KVKK gibi veri koruma mevzuatlar\u0131n\u0131n s\u0131k\u0131la\u015ft\u0131\u011f\u0131 bir \u00e7a\u011fda, sa\u011flam bir kimlik do\u011frulama sistemi kurmak sadece iyi bir pratik de\u011fil, ayn\u0131 zamanda zorunlu bir gerekliliktir. Kullan\u0131c\u0131lar\u0131n verilerine eri\u015fimlerini kontrol alt\u0131nda tutmak, onlara g\u00fcvenli bir ortam sunmak ve doland\u0131r\u0131c\u0131l\u0131\u011f\u0131 \u00f6nlemek, bu sistemlerin ba\u015fl\u0131ca g\u00f6revlerindendir.<\/p>\n<p>\u00dcstelik, kimlik do\u011frulama sadece k\u00f6t\u00fc niyetli ki\u015fileri d\u0131\u015far\u0131da tutmakla kalmaz, ayn\u0131 zamanda kullan\u0131c\u0131lara ki\u015fiselle\u015ftirilmi\u015f deneyimler sunman\u0131n da anahtar\u0131d\u0131r. Bir kullan\u0131c\u0131 sisteme giri\u015f yapt\u0131\u011f\u0131nda, uygulama onu tan\u0131r ve tercihlerine, ge\u00e7mi\u015f i\u015flemlerine veya abonelik d\u00fczeyine g\u00f6re \u00f6zelle\u015ftirilmi\u015f i\u00e7erik ve i\u015flevsellik sunabilir. \u00d6rne\u011fin, bir e-ticaret sitesi giri\u015f yapan bir kullan\u0131c\u0131ya daha \u00f6nce bakt\u0131\u011f\u0131 \u00fcr\u00fcnleri hat\u0131rlatabilir veya ona \u00f6zel indirimler \u00f6nerebilir. Bu da kullan\u0131c\u0131 memnuniyetini ve uygulaman\u0131n kullan\u0131labilirli\u011fini do\u011frudan etkileyen bir fakt\u00f6rd\u00fcr. \u00d6zetle, kullan\u0131c\u0131 kimlik do\u011frulama, modern web uygulamalar\u0131n\u0131n temel direklerinden biridir ve hem g\u00fcvenlik hem de kullan\u0131c\u0131 deneyimi a\u00e7\u0131s\u0131ndan vazge\u00e7ilmezdir.<\/p>\n<h3>Temel Kimlik Do\u011frulama Kavramlar\u0131 Nelerdir?<\/h3>\n<p>Kimlik do\u011frulama sistemlerini anlamak i\u00e7in birka\u00e7 temel kavram\u0131 bilmek elzemdir. Bu kavramlar, bir kullan\u0131c\u0131n\u0131n sisteme nas\u0131l giri\u015f yapt\u0131\u011f\u0131n\u0131, hangi kaynaklara eri\u015febilece\u011fini ve bu eri\u015fimin nas\u0131l y\u00f6netildi\u011fini belirler.<\/p>\n<ul>\n<li>\n            <strong>Kimliklendirme (Authentication):<\/strong> Bu, bir kullan\u0131c\u0131n\u0131n iddia etti\u011fi ki\u015fi oldu\u011funu kan\u0131tlama s\u00fcrecidir. Genellikle bir kullan\u0131c\u0131 ad\u0131 ve parola ile yap\u0131l\u0131r, ancak biyometrik veriler (parmak izi, y\u00fcz tan\u0131ma), tek kullan\u0131ml\u0131k kodlar veya dijital sertifikalar gibi ba\u015fka y\u00f6ntemler de kullan\u0131labilir. Ba\u015far\u0131l\u0131 bir kimliklendirme sonras\u0131nda sistem, kullan\u0131c\u0131n\u0131n kimli\u011fini onaylar.\n        <\/li>\n<li>\n            <strong>Yetkilendirme (Authorization):<\/strong> Kimliklendirme a\u015famas\u0131n\u0131 ge\u00e7en bir kullan\u0131c\u0131n\u0131n, sistem i\u00e7inde hangi kaynaklara veya i\u015flevlere eri\u015febilece\u011fini belirleme s\u00fcrecidir. Bir kullan\u0131c\u0131n\u0131n kimli\u011fi do\u011fruland\u0131ktan sonra, yetkilendirme sistemi onun bir y\u00f6netici mi, standart bir kullan\u0131c\u0131 m\u0131 yoksa sadece bir ziyaret\u00e7i mi oldu\u011funu kontrol eder ve buna g\u00f6re farkl\u0131 eri\u015fim haklar\u0131 tan\u0131mlar. \u00d6rne\u011fin, bir y\u00f6netici t\u00fcm verileri g\u00f6rebilirken, standart bir kullan\u0131c\u0131 sadece kendi verilerini g\u00f6rebilir.\n        <\/li>\n<li>\n            <strong>Oturum Y\u00f6netimi (Session Management):<\/strong> Bir kullan\u0131c\u0131 sisteme giri\u015f yapt\u0131ktan sonra, her istekte yeniden kimlik do\u011frulamas\u0131 yapmak pratik de\u011fildir. Oturum y\u00f6netimi, kullan\u0131c\u0131n\u0131n belirli bir s\u00fcre boyunca &#8220;giri\u015f yapm\u0131\u015f&#8221; durumda kalmas\u0131n\u0131 sa\u011flayan bir mekanizmad\u0131r. Bu genellikle sunucu taraf\u0131nda olu\u015fturulan oturum kimlikleri (session IDs) veya istemci taraf\u0131nda depolanan token&#8217;lar (\u00f6rne\u011fin JWT) arac\u0131l\u0131\u011f\u0131yla yap\u0131l\u0131r. Bu sayede kullan\u0131c\u0131, uygulaman\u0131n farkl\u0131 sayfalar\u0131nda gezinebilirken tekrar tekrar parola girmek zorunda kalmaz.<\/li>\n<\/ul>\n<p>Modern kimlik do\u011frulama sistemleri, bu temel kavramlar\u0131n yan\u0131 s\u0131ra daha ileri teknikler de kullan\u0131r. \u00d6rne\u011fin, <strong>JSON Web Tokens (JWT)<\/strong>, istemci taraf\u0131nda depolanabilen ve sunucunun her istekte veritaban\u0131na sorgu yapmas\u0131na gerek kalmadan kullan\u0131c\u0131 kimli\u011fini ve yetkilerini do\u011frulamas\u0131n\u0131 sa\u011flayan kompakt, URL g\u00fcvenli bir token format\u0131d\u0131r. <strong>OAuth<\/strong> ve <strong>OpenID Connect (OIDC)<\/strong> ise, kullan\u0131c\u0131lar\u0131n farkl\u0131 hizmet sa\u011flay\u0131c\u0131lar (\u00f6rne\u011fin Google, Facebook) arac\u0131l\u0131\u011f\u0131yla kimlik do\u011frulamas\u0131 yapmas\u0131na olanak tan\u0131yan protokollerdir. Bu, kullan\u0131c\u0131lar\u0131n her uygulama i\u00e7in yeni bir hesap olu\u015fturmas\u0131n\u0131 engellerken, geli\u015ftiricilere de kimlik do\u011frulama y\u00fck\u00fcn\u00fc azaltma imkan\u0131 sunar. \u00d6zellikle mikro servis mimarilerinde ve tek oturum a\u00e7ma (Single Sign-On &#8211; SSO) senaryolar\u0131nda bu yakla\u015f\u0131mlar b\u00fcy\u00fck avantaj sa\u011flar. Dolay\u0131s\u0131yla, g\u00fc\u00e7l\u00fc bir kimlik do\u011frulama sistemi tasarlarken bu kavramlar\u0131n her birini dikkatle ele almak ve do\u011fru teknolojiyi se\u00e7mek kritik \u00f6neme sahiptir.<\/p>\n<h2>GitHub Copilot Chat, Geli\u015ftirme S\u00fcrecimizi Nas\u0131l H\u0131zland\u0131r\u0131r?<\/h2>\n<p>Yaz\u0131l\u0131m geli\u015ftirme s\u00fcreci, bazen tekrarlayan g\u00f6revler, karma\u015f\u0131k yap\u0131land\u0131rmalar ve bitmek bilmeyen hata ay\u0131klama d\u00f6ng\u00fcleriyle dolu olabilir. \u0130\u015fte tam da bu noktada, GitHub Copilot Chat gibi yapay zeka destekli ara\u00e7lar devreye girerek, geli\u015ftiricilere adeta bir \u00e7ift sanal programc\u0131 arkada\u015f\u0131 gibi yard\u0131mc\u0131 olur. Copilot Chat, do\u011fal dil i\u015fleme yetenekleri sayesinde, geli\u015ftiricilerin kod yazma, kod anlama, hata ay\u0131klama ve hatta proje yap\u0131land\u0131rma gibi konularda an\u0131nda destek almas\u0131n\u0131 sa\u011flar. \u00d6zellikle s\u0131f\u0131rdan bir kimlik do\u011frulama sistemi kurarken kar\u015f\u0131la\u015fabilece\u011fimiz &#8220;boilerplate&#8221; kod yazma, g\u00fcvenlik protokollerini do\u011fru uygulama veya karma\u015f\u0131k ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00f6netme gibi zorluklarda, Copilot Chat paha bi\u00e7ilmez bir asistan olabilir.<\/p>\n<p>Bir kimlik do\u011frulama sistemi geli\u015ftirmeye ba\u015flad\u0131\u011f\u0131n\u0131zda, \u00f6ncelikle bir sunucu \u00e7at\u0131s\u0131 (framework), veritaban\u0131 ba\u011flant\u0131s\u0131, kullan\u0131c\u0131 modeli ve temel API endpointleri gibi pek \u00e7ok alt bile\u015feni kurman\u0131z gerekir. Bu ba\u015flang\u0131\u00e7 a\u015famas\u0131, projenin b\u00fcy\u00fck bir k\u0131sm\u0131 olmasa da, zaman al\u0131c\u0131 ve dikkat gerektiren bir s\u00fcre\u00e7tir. Copilot Chat&#8217;e do\u011fal dilde isteklerinizi belirterek, \u00f6rne\u011fin &#8220;Node.js ve Express kullanarak temel bir REST API yap\u0131s\u0131 olu\u015ftur&#8221; veya &#8220;PostgreSQL i\u00e7in kullan\u0131c\u0131 tablosu \u015femas\u0131 haz\u0131rla&#8221; gibi komutlarla, dakikalar i\u00e7inde i\u015flevsel kod par\u00e7ac\u0131klar\u0131 veya yap\u0131land\u0131rma dosyalar\u0131 elde edebilirsiniz. Bu, ba\u015flang\u0131\u00e7taki kurulum s\u00fcresini \u00f6nemli \u00f6l\u00e7\u00fcde k\u0131salt\u0131r ve as\u0131l i\u015f mant\u0131\u011f\u0131na odaklanman\u0131z\u0131 sa\u011flar. Ayr\u0131ca, \u00f6zellikle g\u00fcvenlik s\u00f6z konusu oldu\u011funda, do\u011fru \u015fifreleme algoritmalar\u0131n\u0131 veya token y\u00f6netimini uygulamak kritik \u00f6neme sahiptir. Copilot Chat, en iyi pratikleri ve g\u00fcvenli kodlama desenlerini \u00f6nererek, olas\u0131 g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 daha ba\u015flang\u0131\u00e7tan \u00f6nlemenize yard\u0131mc\u0131 olabilir.<\/p>\n<p>Copilot Chat&#8217;in g\u00fcc\u00fc sadece kod \u00fcretmekle s\u0131n\u0131rl\u0131 de\u011fildir. Mevcut kodunuzu analiz edebilir, a\u00e7\u0131klamalar ekleyebilir, hatta farkl\u0131 programlama dillerine \u00e7evirebilir. Bu, \u00f6zellikle ekip i\u00e7inde farkl\u0131 bilgi birikimine sahip geli\u015ftiriciler oldu\u011funda veya legacy (eski) bir sistemle \u00e7al\u0131\u015fmak zorunda kald\u0131\u011f\u0131n\u0131zda \u00e7ok faydal\u0131d\u0131r. Proje genelinde tutarl\u0131l\u0131\u011f\u0131 sa\u011flamak, yeni bir g\u00fcvenlik \u00f6zelli\u011fi entegre etmek veya bir hatay\u0131 h\u0131zl\u0131ca tespit edip d\u00fczeltmek i\u00e7in Copilot Chat&#8217;ten rehberlik almak, geli\u015ftirme d\u00f6ng\u00fcs\u00fcn\u00fc ciddi \u015fekilde h\u0131zland\u0131r\u0131r ve geli\u015ftirici verimlili\u011fini art\u0131r\u0131r. Bu da karma\u015f\u0131k bir kimlik do\u011frulama sistemi gibi \u00f6nemli bir bile\u015feni kurarken hem zamandan tasarruf etmenizi hem de daha g\u00fcvenli ve sa\u011flam bir yap\u0131 in\u015fa etmenizi m\u00fcmk\u00fcn k\u0131lar.<\/p>\n<h3>Copilot Chat ile Proje Yap\u0131s\u0131n\u0131 Olu\u015fturmak M\u00fcmk\u00fcn M\u00fc?<\/h3>\n<p>Evet, kesinlikle m\u00fcmk\u00fcn! GitHub Copilot Chat, s\u0131f\u0131rdan bir projenin temel yap\u0131s\u0131n\u0131 olu\u015fturmak i\u00e7in harika bir ara\u00e7t\u0131r. Geli\u015ftirme s\u00fcrecinin ba\u015flang\u0131c\u0131nda, bir\u00e7ok geli\u015ftirici proje \u015fablonlar\u0131 veya &#8220;boilerplate&#8221; kod aray\u0131\u015f\u0131na girer. Copilot Chat ile bu s\u00fcreci tamamen do\u011fal dil komutlar\u0131yla y\u00f6netebilirsiniz. \u00d6rne\u011fin, bir Node.js ve Express tabanl\u0131 bir backend projesi ba\u015flatmak istedi\u011finizde, Copilot Chat&#8217;e do\u011frudan ne istedi\u011finizi sorabilirsiniz. B\u00f6ylece, manuel olarak dosya ve klas\u00f6r olu\u015fturma, temel ba\u011f\u0131ml\u0131l\u0131klar\u0131 kurma ve ba\u015flang\u0131\u00e7 kodunu yazma gibi tekrarlayan i\u015flerden kurtulursunuz.<\/p>\n<p>Diyelim ki, bir kullan\u0131c\u0131 kimlik do\u011frulama sistemi i\u00e7in bir backend (sunucu taraf\u0131) ve bir frontend (istemci taraf\u0131) geli\u015ftirmek istiyorsunuz. Copilot Chat&#8217;ten \u015fu t\u00fcr komutlarla yard\u0131m alabilirsiniz:<\/p>\n<ul>\n<li>&#8220;Node.js, Express ve MongoDB i\u00e7in temel bir REST API projesi olu\u015ftur. Dosya yap\u0131s\u0131 olarak <code>src<\/code>, <code>routes<\/code>, <code>controllers<\/code>, <code>models<\/code>, <code>config<\/code> klas\u00f6rlerini i\u00e7ersin.&#8221;<\/li>\n<li>&#8220;React projesi i\u00e7in temel bir klas\u00f6r yap\u0131s\u0131 haz\u0131rla: <code>src<\/code>, <code>components<\/code>, <code>pages<\/code>, <code>services<\/code>, <code>hooks<\/code>.&#8221;<\/li>\n<li>&#8220;Bir Express uygulamas\u0131nda <code>package.json<\/code> dosyas\u0131 i\u00e7in gerekli temel ba\u011f\u0131ml\u0131l\u0131klar\u0131 (express, mongoose, bcrypt, jsonwebtoken, dotenv, cors) i\u00e7eren bir taslak olu\u015ftur.&#8221;<\/li>\n<\/ul>\n<p>Copilot Chat, bu isteklerinize yan\u0131t olarak size ilgili kod par\u00e7ac\u0131klar\u0131, klas\u00f6r yap\u0131lar\u0131 veya <code>package.json<\/code> gibi yap\u0131land\u0131rma dosyalar\u0131n\u0131 sunacakt\u0131r. \u00d6rne\u011fin, Express i\u00e7in temel bir ba\u015flang\u0131\u00e7 dosyas\u0131 iste\u011finde bulundu\u011funuzda size \u015f\u00f6yle bir \u00e7\u0131kt\u0131 verebilir:<\/p>\n<pre><code class=\"language-javascript\">\n\/\/ app.js\nconst express = require('express');\nconst dotenv = require('dotenv');\nconst connectDB = require('.\/config\/db'); \/\/ Veritaban\u0131 ba\u011flant\u0131s\u0131 oldu\u011funu varsayal\u0131m\nconst authRoutes = require('.\/routes\/authRoutes');\n\ndotenv.config(); \/\/ Ortam de\u011fi\u015fkenlerini y\u00fckle\n\nconst app = express();\n\n\/\/ Veritaban\u0131 ba\u011flant\u0131s\u0131\nconnectDB();\n\n\/\/ Middleware'ler\napp.use(express.json()); \/\/ Body parser\n\n\/\/ Rotalar\napp.use('\/api\/auth', authRoutes);\n\n\/\/ Sunucuyu dinle\nconst PORT = process.env.PORT || 5000;\napp.listen(PORT, () => console.log(<code>Server ${PORT} portunda \u00e7al\u0131\u015f\u0131yor.<\/code>));\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu, size do\u011frudan projenizi \u00e7al\u0131\u015ft\u0131rmaya ba\u015flaman\u0131z i\u00e7in gereken temeli sa\u011flar. Ard\u0131ndan, Copilot Chat'ten bu temel yap\u0131ya kullan\u0131c\u0131 modeli, kimlik do\u011frulama rotalar\u0131 veya g\u00fcvenlik middleware'leri eklemesini isteyebilirsiniz. Bu yakla\u015f\u0131m, sadece zamandan tasarruf etmekle kalmaz, ayn\u0131 zamanda projenizin en ba\u015f\u0131ndan itibaren belirli bir standart ve en iyi pratiklerle uyumlu olmas\u0131n\u0131 sa\u011flar. \u00d6zellikle yeni bir teknoloji veya k\u00fct\u00fcphane \u00f6\u011frenirken, ba\u015flang\u0131\u00e7taki zorluklar\u0131 a\u015fmak i\u00e7in Copilot Chat'in sundu\u011fu bu destek hayati \u00f6nem ta\u015f\u0131r. Proje yap\u0131land\u0131rmas\u0131ndaki tutarl\u0131l\u0131k, uzun vadede projenin s\u00fcrd\u00fcr\u00fclebilirli\u011fi ve ekip \u00e7al\u0131\u015fmas\u0131 i\u00e7in de b\u00fcy\u00fck avantajlar sunar.<\/p>\n<h2>Ad\u0131m Ad\u0131m Kimlik Do\u011frulama Ak\u0131\u015f\u0131 Tasar\u0131m\u0131 ve Uygulamas\u0131<\/h2>\n<p>Kullan\u0131c\u0131 kimlik do\u011frulama sistemi kurarken at\u0131lmas\u0131 gereken ad\u0131mlar olduk\u00e7a net bir s\u0131raya sahiptir. Bu ak\u0131\u015f, kullan\u0131c\u0131 kayd\u0131ndan ba\u015flay\u0131p, oturum y\u00f6netimine kadar uzan\u0131r ve hem sunucu (backend) hem de istemci (frontend) taraflar\u0131n\u0131 kapsar. Ba\u015far\u0131l\u0131 bir kimlik do\u011frulama ak\u0131\u015f\u0131, sadece i\u015flevsel de\u011fil, ayn\u0131 zamanda g\u00fcvenli ve kullan\u0131c\u0131 dostu olmal\u0131d\u0131r. GitHub Copilot Chat, bu ak\u0131\u015f\u0131n her a\u015famas\u0131nda size rehberlik ederek, do\u011fru kod par\u00e7ac\u0131klar\u0131n\u0131 \u00fcretmenize, g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 \u00f6nlemenize ve geli\u015ftirme s\u00fcrecini h\u0131zland\u0131rman\u0131za yard\u0131mc\u0131 olur.<\/p>\n<p>\u0130lk olarak, kullan\u0131c\u0131lar\u0131n sisteme nas\u0131l kaydolaca\u011f\u0131n\u0131 ve giri\u015f yapaca\u011f\u0131n\u0131 belirlememiz gerekir. Bu genellikle bir kullan\u0131c\u0131 ad\u0131 (veya e-posta adresi) ve bir paroladan olu\u015fur. Ancak parolalar\u0131n veritaban\u0131nda d\u00fcz metin olarak saklanmamas\u0131 gerekti\u011fi gibi kritik g\u00fcvenlik prensipleri vard\u0131r. Daha sonra, kullan\u0131c\u0131 ba\u015far\u0131yla giri\u015f yapt\u0131ktan sonra, onun kimli\u011fini her istekte do\u011frulamak i\u00e7in bir mekanizmaya ihtiyac\u0131m\u0131z olacakt\u0131r. Bu noktada JSON Web Tokens (JWT) devreye girer. JWT'ler, kullan\u0131c\u0131 oturumlar\u0131n\u0131 y\u00f6netmek ve yetkilendirme bilgilerini g\u00fcvenli bir \u015fekilde ta\u015f\u0131mak i\u00e7in modern web uygulamalar\u0131nda yayg\u0131n olarak kullan\u0131lan bir y\u00f6ntemdir. Token'lar, bir kez olu\u015fturulduktan sonra istemci taraf\u0131ndan saklan\u0131r ve her API iste\u011fiyle birlikte sunucuya g\u00f6nderilerek kullan\u0131c\u0131n\u0131n kimli\u011fini do\u011frular.<\/p>\n<p>Bu a\u015famalar\u0131n her biri, dikkatli bir planlama ve do\u011fru kodlama gerektirir. \u00d6rne\u011fin, bir kullan\u0131c\u0131n\u0131n kaydolurken girdi\u011fi parolan\u0131n hashlenmesi ve veritaban\u0131na kaydedilmesi, ard\u0131ndan giri\u015f yaparken girilen parolan\u0131n bu hashlenmi\u015f parola ile kar\u015f\u0131la\u015ft\u0131r\u0131lmas\u0131 ayr\u0131 ayr\u0131 ad\u0131mlard\u0131r. Token olu\u015fturma, token do\u011frulama, token yenileme (refresh token) gibi karma\u015f\u0131k i\u015flemler de bu ak\u0131\u015f\u0131n \u00f6nemli par\u00e7alar\u0131d\u0131r. Copilot Chat'e \"Bcrypt ile parola hashleme nas\u0131l yap\u0131l\u0131r?\" veya \"Node.js'te JWT olu\u015fturma ve do\u011frulama \u00f6rne\u011fi ver\" gibi sorular sorarak, bu ad\u0131mlar\u0131 h\u0131zl\u0131 ve g\u00fcvenli bir \u015fekilde uygulayabilirsiniz. Ayr\u0131ca, kullan\u0131c\u0131 aray\u00fcz\u00fcnde (frontend) giri\u015f formlar\u0131 olu\u015fturmak, token'\u0131 depolamak ve korumal\u0131 rotalara eri\u015fimi sa\u011flamak da bu ak\u0131\u015f\u0131n ayr\u0131lmaz bir par\u00e7as\u0131d\u0131r. Geli\u015ftirme boyunca, her iki taraf\u0131n (backend ve frontend) da birbiriyle uyumlu \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olmak i\u00e7in s\u00fcrekli testler yapmak da \u00f6nemlidir.<\/p>\n<h3>Backend \u0130\u00e7in G\u00fcvenli Kimlik Do\u011frulama API'lar\u0131 Nas\u0131l Yaz\u0131l\u0131r?<\/h3>\n<p>Backend (sunucu taraf\u0131), bir kimlik do\u011frulama sisteminin kalbidir. Kullan\u0131c\u0131lar\u0131n kayd\u0131n\u0131, giri\u015fini, parolalar\u0131n g\u00fcvenli bir \u015fekilde saklanmas\u0131n\u0131 ve eri\u015fim token'lar\u0131n\u0131n y\u00f6netimini burada ele al\u0131r\u0131z. Bu API'lar\u0131 yazarken g\u00fcvenlik, performanstan bile \u00f6nce gelir. Copilot Chat, bu s\u00fcre\u00e7te g\u00fcvenli ve i\u015flevsel kod par\u00e7ac\u0131klar\u0131 olu\u015fturman\u0131z i\u00e7in size yard\u0131mc\u0131 olabilir.<\/p>\n<p><strong>1. Kullan\u0131c\u0131 Modeli Olu\u015fturma:<\/strong><br \/>\n    Veritaban\u0131nda kullan\u0131c\u0131 bilgilerini saklamak i\u00e7in bir modele ihtiyac\u0131m\u0131z var. Genellikle e-posta, parola, kullan\u0131c\u0131 ad\u0131 ve belki de olu\u015fturulma tarihi gibi alanlar\u0131 i\u00e7erir. Parolan\u0131n d\u00fcz metin olarak saklanmamas\u0131 gerekti\u011fini unutmamal\u0131y\u0131z.<\/p>\n<pre><code class=\"language-javascript\">\n\/\/ models\/User.js (Mongoose \u00f6rne\u011fi)\nconst mongoose = require('mongoose');\nconst bcrypt = require('bcryptjs');\n\nconst UserSchema = new mongoose.Schema({\n    username: { type: String, required: true, unique: true },\n    email: { type: String, required: true, unique: true },\n    password: { type: String, required: true },\n    createdAt: { type: Date, default: Date.now }\n});\n\n\/\/ Parola kaydetmeden \u00f6nce hashleme (pre-save hook)\nUserSchema.pre('save', async function(next) {\n    if (!this.isModified('password')) {\n        return next();\n    }\n    const salt = await bcrypt.genSalt(10);\n    this.password = await bcrypt.hash(this.password, salt);\n    next();\n});\n\n\/\/ Parolalar\u0131 kar\u015f\u0131la\u015ft\u0131rma metodu\nUserSchema.methods.matchPassword = async function(enteredPassword) {\n    return await bcrypt.compare(enteredPassword, this.password);\n};\n\nmodule.exports = mongoose.model('User', UserSchema);\n    <\/pre>\n<p><\/code><\/p>\n<p><strong>2. Kay\u0131t (Register) API'si:<\/strong><br \/>\n    Yeni bir kullan\u0131c\u0131 olu\u015fturmak i\u00e7in bir POST endpoint'i. Kullan\u0131c\u0131dan gelen e-posta ve parolay\u0131 al\u0131r, parolay\u0131 hash'ler ve veritaban\u0131na kaydeder. Copilot Chat'e \"Node.js Express'te kullan\u0131c\u0131 kay\u0131t endpoint'i olu\u015ftur\" diyerek h\u0131zl\u0131ca bir taslak isteyebilirsiniz.<\/p>\n<pre><code class=\"language-javascript\">\n\/\/ controllers\/authController.js\nconst User = require('..\/models\/User');\nconst jwt = require('jsonwebtoken');\n\nconst generateToken = (id) => {\n    return jwt.sign({ id }, process.env.JWT_SECRET, { expiresIn: '1h' });\n};\n\nexports.registerUser = async (req, res) => {\n    const { username, email, password } = req.body;\n\n    try {\n        const userExists = await User.findOne({ email });\n        if (userExists) {\n            return res.status(400).json({ message: 'Bu e-posta zaten kullan\u0131mda.' });\n        }\n\n        const user = await User.create({ username, email, password });\n\n        if (user) {\n            res.status(201).json({\n                _id: user._id,\n                username: user.username,\n                email: user.email,\n                token: generateToken(user._id),\n            });\n        } else {\n            res.status(400).json({ message: 'Ge\u00e7ersiz kullan\u0131c\u0131 verileri.' });\n        }\n    } catch (error) {\n        res.status(500).json({ message: error.message });\n    }\n};\n    <\/pre>\n<p><\/code><\/p>\n<p><strong>3. Giri\u015f (Login) API'si:<\/strong><br \/>\n    Kullan\u0131c\u0131n\u0131n e-posta ve parolas\u0131n\u0131 al\u0131r, parolay\u0131 hashlenmi\u015f parola ile kar\u015f\u0131la\u015ft\u0131r\u0131r. E\u015fle\u015firse, bir JWT olu\u015fturur ve istemciye g\u00f6nderir.<\/p>\n<pre><code class=\"language-javascript\">\n\/\/ controllers\/authController.js (devam\u0131)\nexports.loginUser = async (req, res) => {\n    const { email, password } = req.body;\n\n    try {\n        const user = await User.findOne({ email });\n\n        if (user && (await user.matchPassword(password))) {\n            res.json({\n                _id: user._id,\n                username: user.username,\n                email: user.email,\n                token: generateToken(user._id),\n            });\n        } else {\n            res.status(401).json({ message: 'Ge\u00e7ersiz e-posta veya parola.' });\n        }\n    } catch (error) {\n        res.status(500).json({ message: error.message });\n    }\n};\n    <\/pre>\n<p><\/code><\/p>\n<p><strong>4. Kimlik Do\u011frulama Middleware'i:<\/strong><br \/>\n    Korumal\u0131 rotalara eri\u015fimi kontrol etmek i\u00e7in her istekte token'\u0131 do\u011frulayan bir middleware. Copilot Chat'e \"JWT do\u011frulama middleware'i nas\u0131l yaz\u0131l\u0131r?\" diye sorarak yard\u0131m alabilirsiniz.<\/p>\n<pre><code class=\"language-javascript\">\n\/\/ middleware\/authMiddleware.js\nconst jwt = require('jsonwebtoken');\nconst User = require('..\/models\/User');\n\nexports.protect = async (req, res, next) => {\n    let token;\n\n    if (req.headers.authorization && req.headers.authorization.startsWith('Bearer')) {\n        try {\n            \/\/ Token'\u0131 Authorization header'\u0131ndan al\n            token = req.headers.authorization.split(' ')[1];\n\n            \/\/ Token'\u0131 do\u011frula\n            const decoded = jwt.verify(token, process.env.JWT_SECRET);\n\n            \/\/ Token'daki kullan\u0131c\u0131 ID'si ile kullan\u0131c\u0131y\u0131 bul ve request objesine ekle\n            req.user = await User.findById(decoded.id).select('-password');\n            next();\n        } catch (error) {\n            console.error(error);\n            res.status(401).json({ message: 'Yetkisiz eri\u015fim, token ge\u00e7ersiz.' });\n        }\n    }\n\n    if (!token) {\n        res.status(401).json({ message: 'Yetkisiz eri\u015fim, token bulunamad\u0131.' });\n    }\n};\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu API'lar, kimlik do\u011frulama sisteminizin temelini olu\u015fturur. Copilot Chat'ten belirli hatalar i\u00e7in hata i\u015fleme kodlar\u0131 veya farkl\u0131 veritaban\u0131 s\u00fcr\u00fcc\u00fclerine g\u00f6re adaptasyonlar isteyerek, kodunuzu daha sa\u011flam ve esnek hale getirebilirsiniz. Unutmay\u0131n, backend g\u00fcvenli\u011fi her \u015feyin ba\u015f\u0131nda gelir; bu y\u00fczden parola hashleme, token imzalamalar\u0131 ve uygun hata mesajlar\u0131 gibi detaylara \u00f6zellikle dikkat edin.<\/p>\n<div class=\"uzman-ipucu\">\n        Uzman \u0130pucu: G\u00fcvenlik ba\u015fl\u0131klar\u0131n\u0131 (Content-Security-Policy, X-XSS-Protection vb.) Express uygulaman\u0131za eklemek i\u00e7in 'helmet' k\u00fct\u00fcphanesini kullanmay\u0131 d\u00fc\u015f\u00fcnebilirsiniz. Copilot Chat'ten helmet kurulumu ve kullan\u0131m\u0131 hakk\u0131nda bilgi isteyebilirsiniz. Bu, uygulaman\u0131z\u0131n \u00e7e\u015fitli web g\u00fcvenlik a\u00e7\u0131klar\u0131na kar\u015f\u0131 korunmas\u0131na yard\u0131mc\u0131 olur.\n    <\/div>\n<h3>Frontend Taraf\u0131nda Kimlik Do\u011frulama Ak\u0131\u015f\u0131 Nas\u0131l Y\u00f6netilir?<\/h3>\n<p>Frontend (istemci taraf\u0131), kullan\u0131c\u0131n\u0131n kimlik do\u011frulama sistemiyle do\u011frudan etkile\u015fime girdi\u011fi aray\u00fczd\u00fcr. Kullan\u0131c\u0131 dostu formlar, token'\u0131n g\u00fcvenli bir \u015fekilde depolanmas\u0131 ve korumal\u0131 rotalara eri\u015fimin y\u00f6netilmesi burada kritik \u00f6neme sahiptir. React, Vue veya Angular gibi modern JavaScript framework'leri, bu t\u00fcr bir ak\u0131\u015f\u0131 y\u00f6netmek i\u00e7in g\u00fc\u00e7l\u00fc ara\u00e7lar sunar. Copilot Chat, bu bile\u015fenleri ve ak\u0131\u015flar\u0131 olu\u015fturman\u0131zda da size yol g\u00f6sterecektir.<\/p>\n<p><strong>1. Giri\u015f\/Kay\u0131t Formlar\u0131:<\/strong><br \/>\n    Kullan\u0131c\u0131lar\u0131n e-posta ve parola girmesi i\u00e7in basit formlara ihtiyac\u0131m\u0131z var. Bu formlar, kullan\u0131c\u0131n\u0131n girdi\u011fi verileri al\u0131p backend API'lerine g\u00f6ndermelidir.<\/p>\n<pre><code class=\"language-javascript\">\n\/\/ components\/LoginForm.jsx (React \u00f6rne\u011fi)\nimport React, { useState } from 'react';\nimport axios from 'axios'; \/\/ Axios ile HTTP istekleri\n\nfunction LoginForm({ onLoginSuccess }) {\n    const [email, setEmail] = useState('');\n    const [password, setPassword] = useState('');\n    const [error, setError] = useState('');\n\n    const handleSubmit = async (e) => {\n        e.preventDefault();\n        setError('');\n        try {\n            const response = await axios.post('http:\/\/localhost:5000\/api\/auth\/login', { email, password });\n            localStorage.setItem('authToken', response.data.token); \/\/ Token'\u0131 depola\n            onLoginSuccess(); \/\/ Ba\u015far\u0131l\u0131 giri\u015f callback'i\n        } catch (err) {\n            setError(err.response?.data?.message || 'Giri\u015f ba\u015far\u0131s\u0131z.');\n        }\n    };\n\n    return (\n        <form onSubmit={handleSubmit}>\n            <div>\n                <label>E-posta:<\/label>\n                <input type=\"email\" value={email} onChange={(e) => setEmail(e.target.value)} required \/>\n            <\/div>\n            <div>\n                <label>Parola:<\/label>\n                <input type=\"password\" value={password} onChange={(e) => setPassword(e.target.value)} required \/>\n            <\/div>\n            {error && <p style={{ color: 'red' }}>{error}<\/p>}\n            <button type=\"submit\">Giri\u015f Yap<\/button>\n        <\/form>\n    );\n}\n\nexport default LoginForm;\n    <\/pre>\n<p><\/code><\/p>\n<p><strong>2. Token Depolama:<\/strong><br \/>\n    Backend'den gelen JWT'nin g\u00fcvenli bir \u015fekilde depolanmas\u0131 \u00f6nemlidir. Genellikle <code>localStorage<\/code> veya <code>sessionStorage<\/code> kullan\u0131l\u0131r, ancak XSS sald\u0131r\u0131lar\u0131na kar\u015f\u0131 daha g\u00fcvenli oldu\u011fu i\u00e7in HTTP-only cookies tercih edilebilir. Copilot Chat'ten \"React'te JWT'yi g\u00fcvenli bir \u015fekilde depolama y\u00f6ntemleri\" hakk\u0131nda bilgi isteyebilirsiniz.<\/p>\n<p><strong>3. Korumal\u0131 Rotalar (Protected Routes):<\/strong><br \/>\n    Kullan\u0131c\u0131n\u0131n giri\u015f yap\u0131p yapmad\u0131\u011f\u0131na ba\u011fl\u0131 olarak belirli sayfalara eri\u015fimi kontrol etmek i\u00e7in korumal\u0131 rotalar kullan\u0131l\u0131r. Bu, genellikle React Router gibi k\u00fct\u00fcphanelerle bir y\u00f6nlendirme bile\u015feni (<code>ProtectedRoute<\/code>) olu\u015fturularak yap\u0131l\u0131r.<\/p>\n<pre><code class=\"language-javascript\">\n\/\/ components\/ProtectedRoute.jsx\nimport React from 'react';\nimport { Navigate, Outlet } from 'react-router-dom';\n\nconst ProtectedRoute = () => {\n    const isAuthenticated = localStorage.getItem('authToken'); \/\/ Token varl\u0131\u011f\u0131n\u0131 kontrol et\n\n    return isAuthenticated ? <Outlet \/> : <Navigate to=\"\/login\" replace \/>;\n};\n\nexport default ProtectedRoute;\n    <\/pre>\n<p><\/code><\/p>\n<pre><code class=\"language-javascript\"><\/pre>\n<p><\/code><br \/>\n\/\/ App.js (Router \u00f6rne\u011fi)<br \/>\nimport React from 'react';<br \/>\nimport { BrowserRouter as Router, Routes, Route } from 'react-router-dom';<br \/>\nimport LoginForm from '.\/components\/LoginForm';<br \/>\nimport Dashboard from '.\/pages\/Dashboard';<br \/>\nimport ProtectedRoute from '.\/components\/ProtectedRoute';<\/p>\n<p>function App() {<br \/>\n    const handleLoginSuccess = () => {<br \/>\n        window.location.href = '\/dashboard'; \/\/ Giri\u015f sonras\u0131 y\u00f6nlendirme<br \/>\n    };<\/p>\n<p>    return (<br \/>\n        <Router><br \/>\n            <Routes><br \/>\n                <Route path=\"\/login\" element={<LoginForm onLoginSuccess={handleLoginSuccess} \/>} \/><br \/>\n                <Route element={<ProtectedRoute \/>}><br \/>\n                    <Route path=\"\/dashboard\" element={<Dashboard \/>} \/><br \/>\n                <\/Route><br \/>\n                {\/* Di\u011fer rotalar *\/}<br \/>\n            <\/Routes><br \/>\n        <\/Router><br \/>\n    );<br \/>\n}<\/p>\n<p>export default App;<br \/>\n    <\/code><\/p>\n<p>Bu ad\u0131mlar, frontend uygulaman\u0131z\u0131n kimlik do\u011frulama ak\u0131\u015f\u0131n\u0131 nas\u0131l y\u00f6netece\u011fini g\u00f6sterir. Kullan\u0131c\u0131 deneyimini iyile\u015ftirmek i\u00e7in y\u00fcklenme durumlar\u0131, hata mesajlar\u0131 ve y\u00f6nlendirmeleri de dahil etmek \u00f6nemlidir. Copilot Chat'ten bu formlar\u0131n stilize edilmesi, input do\u011frulama eklenmesi veya daha karma\u015f\u0131k state y\u00f6netimi i\u00e7in \u00f6rnekler isteyebilirsiniz. Mobil uyumlu bir aray\u00fcz i\u00e7in ise CSS media query'lerini kullanarak farkl\u0131 ekran boyutlar\u0131na uygun tasar\u0131mlar yapman\u0131z gerekmektedir. \u00d6rne\u011fin, k\u00fc\u00e7\u00fck ekranlar i\u00e7in form elementlerinin y\u0131\u011f\u0131lmas\u0131 veya font boyutlar\u0131n\u0131n ayarlanmas\u0131 gibi d\u00fczenlemeler yap\u0131labilir. <\/p>\n<pre><code class=\"language-html\">\/* \u00d6rnek mobil uyumlu CSS: *\/\n    @media (max-width: 768px) {\n        body {\n            font-size: 14px;\n        }\n        .container {\n            padding: 15px;\n        }\n        form {\n            width: 90%;\n            margin: auto;\n        }\n    }<\/pre>\n<p><\/code>\n    <\/p>\n<h2>G\u00fcvenli\u011fi Bir \u00dcst Seviyeye Ta\u015f\u0131mak: \u0130leri D\u00fczey Kimlik Do\u011frulama Teknikleri<\/h2>\n<p>Temel bir kimlik do\u011frulama sistemini kurmak \u00f6nemlidir, ancak modern tehditlere kar\u015f\u0131 tam koruma sa\u011flamak i\u00e7in daha ileri d\u00fczey g\u00fcvenlik teknikleri uygulamak gerekir. Bu teknikler, kullan\u0131c\u0131 hesaplar\u0131n\u0131 daha g\u00fcvenli hale getirmenin yan\u0131 s\u0131ra, uygulaman\u0131n genel g\u00fcvenlik duru\u015funu da g\u00fc\u00e7lendirir. GitHub Copilot Chat, bu karma\u015f\u0131k g\u00fcvenlik \u00f6zelliklerini entegre etme konusunda da size de\u011ferli yard\u0131mlar sunabilir, en iyi pratikleri ve kod \u00f6rneklerini sunarak s\u00fcreci kolayla\u015ft\u0131rabilir.<\/p>\n<p>\u00d6ncelikle, yaln\u0131zca kullan\u0131c\u0131 ad\u0131 ve paroladan olu\u015fan bir kimlik do\u011frulama sistemi, phishing (oltalama) sald\u0131r\u0131lar\u0131 veya parola tahmin sald\u0131r\u0131lar\u0131 gibi risklere a\u00e7\u0131kt\u0131r. Bu nedenle, iki fakt\u00f6rl\u00fc kimlik do\u011frulama (2FA) gibi ek g\u00fcvenlik katmanlar\u0131 eklemek hayati \u00f6nem ta\u015f\u0131r. 2FA, kullan\u0131c\u0131n\u0131n kimli\u011fini iki farkl\u0131 \"fakt\u00f6r\" ile do\u011frular: genellikle \"bildi\u011fi bir \u015fey\" (parola) ve \"sahip oldu\u011fu bir \u015fey\" (telefonuna g\u00f6nderilen SMS kodu veya bir kimlik do\u011frulay\u0131c\u0131 uygulama). Bu sayede, k\u00f6t\u00fc niyetli bir ki\u015fi parolan\u0131z\u0131 ele ge\u00e7irse bile, ikinci fakt\u00f6re sahip olmad\u0131\u011f\u0131 s\u00fcrece hesab\u0131n\u0131za eri\u015femez. E-posta do\u011frulama ise, kullan\u0131c\u0131n\u0131n kaydoldu\u011fu e-posta adresinin ger\u00e7ekten kendisine ait oldu\u011funu teyit ederek sahte hesap olu\u015fturulmas\u0131n\u0131 engeller ve parola s\u0131f\u0131rlama gibi i\u015flemlerin g\u00fcvenli\u011fini art\u0131r\u0131r.<\/p>\n<p>Oturum g\u00fcvenli\u011fi de s\u00fcrekli dikkat edilmesi gereken bir di\u011fer aland\u0131r. JWT kullan\u0131rken, token'lar\u0131n \u00e7al\u0131nmas\u0131n\u0131 \u00f6nlemek i\u00e7in XSS ve CSRF gibi sald\u0131r\u0131lara kar\u015f\u0131 \u00f6nlemler almak \u00f6nemlidir. Refresh token mekanizmas\u0131, k\u0131sa \u00f6m\u00fcrl\u00fc eri\u015fim token'lar\u0131 kullanarak riskleri minimize eder ve \u00e7al\u0131nan bir token'\u0131n kullan\u0131m s\u00fcresini s\u0131n\u0131rlar. Ayr\u0131ca, uygulama i\u00e7indeki farkl\u0131 kullan\u0131c\u0131 gruplar\u0131n\u0131n (y\u00f6netici, normal kullan\u0131c\u0131, misafir) farkl\u0131 kaynaklara eri\u015fimini sa\u011flamak i\u00e7in rol tabanl\u0131 eri\u015fim kontrol\u00fc (RBAC) gibi yetkilendirme mekanizmalar\u0131 kullanmak, uygulaman\u0131n esnekli\u011fini ve g\u00fcvenli\u011fini art\u0131r\u0131r. Bu ileri d\u00fczey teknikler, sisteminizi sadece i\u015flevsel de\u011fil, ayn\u0131 zamanda d\u0131\u015far\u0131dan gelecek sald\u0131r\u0131lara kar\u015f\u0131 da diren\u00e7li hale getirir ve kullan\u0131c\u0131lara g\u00fcvenli bir dijital deneyim sunar.<\/p>\n<h3>\u0130ki Fakt\u00f6rl\u00fc Kimlik Do\u011frulama (2FA) ve E-posta Do\u011frulama Nas\u0131l Eklenir?<\/h3>\n<p>Uygulaman\u0131z\u0131n g\u00fcvenli\u011fini art\u0131rman\u0131n en etkili yollar\u0131ndan biri, \u0130ki Fakt\u00f6rl\u00fc Kimlik Do\u011frulama (2FA) entegrasyonudur. 2FA, kullan\u0131c\u0131 kimlik do\u011frulamas\u0131na ek bir g\u00fcvenlik katman\u0131 ekler. Bu, genellikle kullan\u0131c\u0131n\u0131n parolas\u0131n\u0131n yan\u0131 s\u0131ra, telefonuna g\u00f6nderilen bir kod veya bir kimlik do\u011frulay\u0131c\u0131 uygulama (\u00f6rne\u011fin Google Authenticator) taraf\u0131ndan \u00fcretilen tek kullan\u0131ml\u0131k bir parola (TOTP) ile sa\u011flan\u0131r. Copilot Chat'e \"Node.js'te TOTP tabanl\u0131 2FA entegrasyonu nas\u0131l yap\u0131l\u0131r?\" diye sorarak ba\u015flamak iyi bir fikirdir.<\/p>\n<ul>\n<li>\n            <strong>2FA Entegrasyonu Ad\u0131mlar\u0131:<\/strong><\/p>\n<ol>\n<li><strong>Kullan\u0131c\u0131 Ayar\u0131:<\/strong> Kullan\u0131c\u0131 ayarlar\u0131nda 2FA'y\u0131 etkinle\u015ftirme se\u00e7ene\u011fi sunun.<\/li>\n<li><strong>Secret Key Olu\u015fturma:<\/strong> Kullan\u0131c\u0131 2FA'y\u0131 etkinle\u015ftirdi\u011finde, sunucu taraf\u0131nda her kullan\u0131c\u0131 i\u00e7in benzersiz bir \"secret key\" olu\u015fturulur. Bu key, kullan\u0131c\u0131n\u0131n kimlik do\u011frulay\u0131c\u0131 uygulamas\u0131na QR kodu veya manuel giri\u015fle eklenir.<\/li>\n<li><strong>Do\u011frulama:<\/strong> Kullan\u0131c\u0131 sisteme giri\u015f yapmaya \u00e7al\u0131\u015ft\u0131\u011f\u0131nda, parola girdikten sonra, kimlik do\u011frulay\u0131c\u0131 uygulamas\u0131ndan veya SMS ile gelen 6 haneli kodu girmesi istenir. Backend, bu kodu daha \u00f6nce olu\u015fturulan secret key ile do\u011frular.<\/li>\n<\/ol>\n<pre><code class=\"language-javascript\">\n\/\/ 2FA i\u00e7in \u00f6rnek bir do\u011frulama fonksiyonu (pseudocode)\nconst speakeasy = require('speakeasy'); \/\/ Pop\u00fcler bir k\u00fct\u00fcphane\n\nexports.verify2FA = (secret, token) => {\n    return speakeasy.totp.verify({\n        secret: secret,\n        encoding: 'base32',\n        token: token,\n        window: 1 \/\/ Zaman tolerans\u0131\n    });\n};\n            <\/pre>\n<p><\/code>\n        <\/li>\n<li>\n            <strong>E-posta Do\u011frulama Ad\u0131mlar\u0131:<\/strong><\/p>\n<ol>\n<li><strong>Token Olu\u015fturma:<\/strong> Kullan\u0131c\u0131 kaydoldu\u011funda, benzersiz bir do\u011frulama token'\u0131 olu\u015fturulur ve veritaban\u0131nda kullan\u0131c\u0131yla ili\u015fkilendirilir.<\/li>\n<li><strong>E-posta G\u00f6nderme:<\/strong> Kullan\u0131c\u0131n\u0131n kaydoldu\u011fu e-posta adresine, bu token'\u0131 i\u00e7eren bir do\u011frulama ba\u011flant\u0131s\u0131 g\u00f6nderilir (\u00f6rn. <code>uygulama.com\/verify?token=XYZ<\/code>).<\/li>\n<li><strong>Do\u011frulama Endpoint'i:<\/strong> Kullan\u0131c\u0131 ba\u011flant\u0131ya t\u0131klad\u0131\u011f\u0131nda, backend'de bu token'\u0131 do\u011frulayan bir endpoint \u00e7a\u011fr\u0131l\u0131r. Token ge\u00e7erliyse, kullan\u0131c\u0131n\u0131n hesab\u0131 \"do\u011frulanm\u0131\u015f\" olarak i\u015faretlenir.<\/li>\n<\/ol>\n<pre><code class=\"language-javascript\">\n\/\/ E-posta g\u00f6nderme i\u00e7in \u00f6rnek (pseudocode, nodemailer ile)\nconst nodemailer = require('nodemailer');\n\nconst sendVerificationEmail = async (email, verificationToken) => {\n    let transporter = nodemailer.createTransport({ \/* SMTP ayarlar\u0131 *\/ });\n    let info = await transporter.sendMail({\n        from: '\"Uygulaman\u0131z\" <noreply@example.com>',\n        to: email,\n        subject: \"Hesab\u0131n\u0131z\u0131 Do\u011frulay\u0131n\",\n        html: <code><p>Hesab\u0131n\u0131z\u0131 do\u011frulamak i\u00e7in <a href=\"http:\/\/localhost:3000\/verify?token=${verificationToken}\">buraya t\u0131klay\u0131n<\/a>.<\/p><\/code>,\n    });\n    console.log(\"Mesaj g\u00f6nderildi: %s\", info.messageId);\n};\n            <\/pre>\n<p><\/code>\n        <\/li>\n<\/ul>\n<p>Hem 2FA hem de e-posta do\u011frulama, kullan\u0131c\u0131 hesaplar\u0131n\u0131n g\u00fcvenli\u011fini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r. Bu \u00f6zelliklerin entegrasyonu karma\u015f\u0131k g\u00f6r\u00fcnebilir, ancak Copilot Chat'ten ad\u0131m ad\u0131m rehberlik ve kod \u00f6rnekleri alarak bu s\u00fcreci daha y\u00f6netilebilir hale getirebilirsiniz.<\/p>\n<h3>Oturum G\u00fcvenli\u011fi ve Yetkilendirme Mekanizmalar\u0131 Nelerdir?<\/h3>\n<p>Kullan\u0131c\u0131 kimli\u011fi do\u011fruland\u0131ktan sonra, oturumun g\u00fcvenli\u011fini sa\u011flamak ve kullan\u0131c\u0131n\u0131n eri\u015fim haklar\u0131n\u0131 do\u011fru bir \u015fekilde y\u00f6netmek (yetkilendirme) kritik \u00f6neme sahiptir. Bu, uygulaman\u0131n genel g\u00fcvenli\u011fini belirleyen \u00f6nemli fakt\u00f6rlerdendir.<\/p>\n<ul>\n<li>\n            <strong>Refresh Token Kullan\u0131m\u0131:<\/strong> JWT'ler genellikle k\u0131sa \u00f6m\u00fcrl\u00fcd\u00fcr (\u00f6rne\u011fin 15 dakika - 1 saat). Bir access token s\u00fcresi doldu\u011funda, kullan\u0131c\u0131n\u0131n tekrar giri\u015f yapmas\u0131n\u0131 istemek kullan\u0131c\u0131 deneyimi a\u00e7\u0131s\u0131ndan iyi de\u011fildir. Bu durumda, daha uzun \u00f6m\u00fcrl\u00fc bir refresh token kullan\u0131l\u0131r. Access token s\u00fcresi doldu\u011funda, istemci refresh token'\u0131 sunucuya g\u00f6nderir ve sunucu ge\u00e7erli refresh token kar\u015f\u0131l\u0131\u011f\u0131nda yeni bir access token verir. Refresh token'lar genellikle veritaban\u0131nda saklan\u0131r ve kullan\u0131c\u0131n\u0131n \u00e7\u0131k\u0131\u015f yapmas\u0131 durumunda ge\u00e7ersiz k\u0131l\u0131n\u0131r. Bu, \u00e7al\u0131nan bir access token'\u0131n potansiyel zarar\u0131n\u0131 minimize eder.\n        <\/li>\n<li>\n            <strong>JWT Kara Listeleri (Blacklisting):<\/strong> Bir kullan\u0131c\u0131 \u00e7\u0131k\u0131\u015f yapt\u0131\u011f\u0131nda veya bir token'\u0131n g\u00fcvenli\u011fi ihlal edildi\u011finde, o token'\u0131n an\u0131nda ge\u00e7ersiz k\u0131l\u0131nmas\u0131 gerekebilir. JWT'ler durumsuz (stateless) oldu\u011fu i\u00e7in bu do\u011frudan yap\u0131lamaz. Ancak sunucu taraf\u0131nda bir \"kara liste\" olu\u015fturarak, ge\u00e7ersiz k\u0131l\u0131nan token'lar\u0131n listesini tutabilir ve her istekte bu listeyi kontrol edebilirsiniz. Bu, performans \u00fczerinde hafif bir etki yaratabilir, ancak g\u00fcvenlik i\u00e7in \u00f6nemli bir ad\u0131md\u0131r.\n        <\/li>\n<li>\n            <strong>CSRF (Cross-Site Request Forgery) Korumas\u0131:<\/strong> Bu sald\u0131r\u0131 t\u00fcr\u00fc, yetkisiz bir web sitesinin kullan\u0131c\u0131n\u0131n kimlik do\u011frulanm\u0131\u015f oturumunu kullanarak, kullan\u0131c\u0131n\u0131n haberi olmadan web uygulaman\u0131za istek g\u00f6ndermesini sa\u011flar. CSRF token'lar\u0131 veya SameSite cookie politikalar\u0131 gibi y\u00f6ntemlerle bu t\u00fcr sald\u0131r\u0131lar \u00f6nlenebilir.\n        <\/li>\n<li>\n            <strong>XSS (Cross-Site Scripting) Korumas\u0131:<\/strong> K\u00f6t\u00fc niyetli komut dosyalar\u0131n\u0131n (script) web sitenize enjekte edilerek kullan\u0131c\u0131 verilerini \u00e7almas\u0131 (\u00f6rne\u011fin localStorage'daki JWT'leri) veya kullan\u0131c\u0131 oturumlar\u0131n\u0131 ele ge\u00e7irmesi durumudur. \u0130\u00e7erik G\u00fcvenlik Politikas\u0131 (CSP) ba\u015fl\u0131klar\u0131, kullan\u0131c\u0131dan gelen input'u do\u011fru \u015fekilde sanitize etmek ve HTTP-only cookies kullanmak XSS'e kar\u015f\u0131 koruma sa\u011flar. Copilot Chat'e \"React'te XSS korumas\u0131 i\u00e7in en iyi pratikler\" veya \"Node.js'te CSRF token'\u0131 nas\u0131l entegre edilir?\" diye sorarak detayl\u0131 bilgi alabilirsiniz.\n        <\/li>\n<li>\n            <strong>Rol Tabanl\u0131 Eri\u015fim Kontrol\u00fc (RBAC):<\/strong> Yetkilendirme i\u00e7in en yayg\u0131n yakla\u015f\u0131mlardan biridir. Kullan\u0131c\u0131lara do\u011frudan izinler vermek yerine, onlar\u0131 belirli rollere (\u00f6rne\u011fin 'admin', 'editor', 'viewer') atars\u0131n\u0131z. Her rol\u00fcn belirli kaynaklara ve i\u015flevlere eri\u015fim izinleri vard\u0131r. Bir kullan\u0131c\u0131n\u0131n hangi role sahip oldu\u011funu belirten bir alan (\u00f6rne\u011fin JWT i\u00e7indeki bir 'role' alan\u0131) kullanarak, backend taraf\u0131nda her API iste\u011fi geldi\u011finde kullan\u0131c\u0131n\u0131n o i\u015flemi yapmaya yetkili olup olmad\u0131\u011f\u0131n\u0131 kontrol edebilirsiniz.<\/p>\n<pre><code class=\"language-javascript\">\n\/\/ Rol tabanl\u0131 yetkilendirme middleware'i \u00f6rne\u011fi\nexports.authorize = (...roles) => {\n    return (req, res, next) => {\n        if (!roles.includes(req.user.role)) {\n            return res.status(403).json({ message: 'Bu i\u015fleme yetkiniz yok.' });\n        }\n        next();\n    };\n};\n\n\/\/ Bir rotada kullan\u0131m\u0131:\n\/\/ router.delete('\/users\/:id', protect, authorize('admin'), deleteUser);\n            <\/pre>\n<p><\/code>\n        <\/li>\n<\/ul>\n<p>Bu ileri d\u00fczey g\u00fcvenlik \u00f6nlemleri, uygulaman\u0131z\u0131n daha diren\u00e7li olmas\u0131n\u0131 sa\u011flar. Copilot Chat, bu karma\u015f\u0131k mekanizmalar\u0131n her birini do\u011fru bir \u015fekilde uygulaman\u0131z i\u00e7in size hem kod \u00f6rnekleri hem de mimari tavsiyeler sunabilir. Unutmay\u0131n, g\u00fcvenlik s\u00fcrekli bir s\u00fcre\u00e7tir ve en son tehditlere kar\u015f\u0131 g\u00fcncel kalmak \u00f6nemlidir.<\/p>\n<h2>Vaka Analizi: K\u00fc\u00e7\u00fck Bir E-ticaret Uygulamas\u0131nda Copilot ile G\u00fcvenli Kimlik Do\u011frulama<\/h2>\n<p>Hayal edelim: Elif, k\u00fc\u00e7\u00fck bir butik i\u015fletme i\u00e7in online bir e-ticaret sitesi kurmak isteyen gen\u00e7 bir geli\u015ftirici. Temel \u00fcr\u00fcn sergileme ve sepet i\u015flevlerini halletmi\u015f, ancak kullan\u0131c\u0131lar\u0131n kaydolabilece\u011fi, giri\u015f yapabilece\u011fi ve sipari\u015f ge\u00e7mi\u015flerini g\u00f6rebilece\u011fi g\u00fcvenli bir kimlik do\u011frulama sistemine ihtiyac\u0131 var. Normalde bu, zaman al\u0131c\u0131 ve potansiyel g\u00fcvenlik a\u00e7\u0131klar\u0131 bar\u0131nd\u0131rabilecek bir s\u00fcre\u00e7. Ancak Elif'in yan\u0131nda GitHub Copilot Chat var.<\/p>\n<p><strong>Senaryo Ba\u015flang\u0131c\u0131:<\/strong> Elif, Node.js, Express ve MongoDB (MERN Stack) kullanarak bir backend, React ile de bir frontend geli\u015ftirecek. Kimlik do\u011frulama i\u00e7in JWT kullanmay\u0131 planl\u0131yor. Ancak hem backend hem de frontend taraf\u0131nda yaz\u0131lmas\u0131 gereken boilerplate kod, parola hashleme, token y\u00f6netimi ve korumal\u0131 rotalar gibi konular g\u00f6z\u00fcn\u00fc korkutuyor.<\/p>\n<p><strong>Copilot Chat Devrede:<\/strong><\/p>\n<ol>\n<li>\n            <strong>Backend Yap\u0131s\u0131:<\/strong> Elif, Copilot Chat'e \u015f\u00f6yle bir soru sorar: \"Node.js Express ve Mongoose ile kullan\u0131c\u0131 kayd\u0131, giri\u015f, JWT olu\u015fturma ve do\u011frulama i\u00e7in gerekli API rotalar\u0131n\u0131 ve controller'lar\u0131n\u0131 i\u00e7eren bir proje yap\u0131s\u0131 ve kod tasla\u011f\u0131 olu\u015ftur.\" Copilot Chat, saniyeler i\u00e7inde <code>User<\/code> modeli, <code>authController<\/code>, <code>authRoutes<\/code> ve <code>authMiddleware<\/code> dosyalar\u0131n\u0131 i\u00e7eren bir \u00f6neri sunar. Hatta <code>bcrypt<\/code> ve <code>jsonwebtoken<\/code> kullan\u0131m \u00f6rneklerini de ekler. Elif, bu tasla\u011f\u0131 baz alarak h\u0131zla backend'ini kurar.<\/p>\n<pre><code class=\"language-javascript\">\n\/\/ Copilot Chat taraf\u0131ndan \u00f6nerilen User modelinin bir k\u0131sm\u0131\nconst UserSchema = new mongoose.Schema({\n    email: { type: String, required: true, unique: true },\n    password: { type: String, required: true },\n    \/\/ ... di\u011fer alanlar\n});\n            <\/pre>\n<p><\/code>\n        <\/li>\n<li>\n            <strong>Parola G\u00fcvenli\u011fi:<\/strong> Elif, parolalar\u0131n nas\u0131l g\u00fcvenli bir \u015fekilde saklanaca\u011f\u0131ndan emin de\u011fildir. Copilot Chat'e \"Node.js'te kullan\u0131c\u0131 parolalar\u0131n\u0131 Bcrypt ile nas\u0131l hash'lerim ve giri\u015f yaparken nas\u0131l kar\u015f\u0131la\u015ft\u0131r\u0131r\u0131m?\" diye sorar. Copilot, <code>UserSchema.pre('save')<\/code> hook'unu ve <code>UserSchema.methods.matchPassword<\/code> metodunu i\u00e7eren g\u00fcvenli bir \u00f6rnek sunar. Bu sayede Elif, manuel olarak bu g\u00fcvenlik ad\u0131m\u0131n\u0131 ara\u015ft\u0131rmaktan ve kodlamaktan kurtulur.<\/li>\n<li>\n            <strong>Frontend Entegrasyonu:<\/strong> Backend haz\u0131r oldu\u011funda, Elif frontend'e ge\u00e7er. Copilot Chat'e \"React'te kullan\u0131c\u0131 giri\u015fi i\u00e7in bir form bile\u015feni ve JWT'yi <code>localStorage<\/code>'a kaydedip korumal\u0131 bir rotaya y\u00f6nlendiren bir mant\u0131k olu\u015ftur\" der. Copilot, hem bir <code>LoginForm.jsx<\/code> bile\u015feni hem de <code>ProtectedRoute.jsx<\/code> i\u00e7in temel bir yap\u0131 sa\u011flar. Elif, bu sayede kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fc ve React Router entegrasyonunu h\u0131zla tamamlar.<\/p>\n<pre><code class=\"language-javascript\">\n\/\/ Copilot Chat'ten gelen React Login formu tasla\u011f\u0131\nimport React, { useState } from 'react';\n\/\/ ... axios ile istek g\u00f6nderme mant\u0131\u011f\u0131\n            <\/pre>\n<p><\/code>\n        <\/li>\n<li>\n            <strong>\u0130leri G\u00fcvenlik \u0130pu\u00e7lar\u0131:<\/strong> Elif, uygulamas\u0131n\u0131n daha g\u00fcvenli olmas\u0131n\u0131 ister. Copilot Chat'e \"JWT tabanl\u0131 kimlik do\u011frulama sistemlerinde s\u0131k\u00e7a g\u00f6r\u00fclen g\u00fcvenlik a\u00e7\u0131klar\u0131 nelerdir ve nas\u0131l \u00f6nleyebilirim? \u00d6zellikle XSS ve CSRF i\u00e7in ne yapmal\u0131y\u0131m?\" diye sorar. Copilot, refresh token kullan\u0131m\u0131, HTTP-only cookies, SameSite politikalar\u0131 ve input sanitizasyonu gibi de\u011ferli tavsiyelerde bulunur ve bunlar i\u00e7in \u00f6rnek kod par\u00e7ac\u0131klar\u0131 sunar. Bu sayede Elif, e-ticaret sitesinin g\u00fcvenlik duru\u015funu g\u00fc\u00e7lendirir.<\/li>\n<\/ol>\n<p><strong>Sonu\u00e7:<\/strong> Elif, GitHub Copilot Chat sayesinde, normalde g\u00fcnler s\u00fcrebilecek ve bir\u00e7ok g\u00fcvenlik endi\u015fesi ta\u015f\u0131yabilecek karma\u015f\u0131k bir kimlik do\u011frulama sistemini \u00e7ok daha k\u0131sa s\u00fcrede ve daha g\u00fcvenli bir \u015fekilde tamamlar. Copilot Chat, sadece kod yazmakla kalmaz, ayn\u0131 zamanda bir dan\u0131\u015fman gibi hareket ederek, Elif'in en iyi pratikleri uygulamas\u0131n\u0131 ve olas\u0131 hatalardan ka\u00e7\u0131nmas\u0131n\u0131 sa\u011flar. Bu vaka analizi, yapay zeka destekli kodlama asistanlar\u0131n\u0131n, \u00f6zellikle kritik sistem bile\u015fenleri geli\u015ftirirken ne kadar de\u011ferli olabilece\u011fini a\u00e7\u0131k\u00e7a g\u00f6stermektedir.<\/p>\n<h2>Sonu\u00e7: Gelece\u011fin G\u00fcvenli Kimlik Do\u011frulama Sistemleri ve Copilot'un Rol\u00fc<\/h2>\n<p>Kapsaml\u0131 bir kullan\u0131c\u0131 kimlik do\u011frulama sistemi olu\u015fturmak, modern web uygulamalar\u0131n\u0131n temel ta\u015flar\u0131ndan biridir. G\u00fcvenlik, kullan\u0131c\u0131 deneyimi ve yasal uyumluluk gibi bir\u00e7ok fakt\u00f6r\u00fc bir arada y\u00f6netmeyi gerektirir. Bu rehber boyunca g\u00f6rd\u00fc\u011f\u00fcm\u00fcz gibi, temellerden ba\u015flay\u0131p ileri d\u00fczey g\u00fcvenlik tekniklerine kadar, her a\u015famada dikkatli bir yakla\u015f\u0131m benimsemek esast\u0131r. GitHub Copilot Chat gibi yapay zeka destekli ara\u00e7lar, bu karma\u015f\u0131k s\u00fcreci inan\u0131lmaz derecede kolayla\u015ft\u0131rabilir. Boilerplate kod \u00fcretimi, g\u00fcvenlik en iyi uygulamalar\u0131 konusunda rehberlik, hata ay\u0131klama ve hatta farkl\u0131 programlama dilleri aras\u0131nda k\u00f6pr\u00fc kurma yetenekleriyle Copilot Chat, geli\u015ftiricilerin zaman ve enerjisini as\u0131l i\u015f mant\u0131\u011f\u0131na odaklamas\u0131na olanak tan\u0131r.<\/p>\n<p>Copilot Chat, sadece bir kod yazma arac\u0131 olman\u0131n \u00f6tesinde, adeta bir \"bilgi kayna\u011f\u0131\" ve \"mentor\" g\u00f6revi \u00fcstlenir. G\u00fcvenlik a\u00e7\u0131klar\u0131 hakk\u0131nda bilgi almak, belirli bir k\u00fct\u00fcphane i\u00e7in kullan\u0131m \u00f6rnekleri istemek veya karma\u015f\u0131k bir ak\u0131\u015f\u0131 ad\u0131m ad\u0131m planlamak gibi konularda, geli\u015ftiricinin yan\u0131nda an\u0131nda bir uzman bulundurmak gibidir. Bu, \u00f6zellikle g\u00fcvenlik gibi kritik alanlarda do\u011fru kararlar almay\u0131 ve sa\u011flam sistemler in\u015fa etmeyi kolayla\u015ft\u0131r\u0131r. Gelecekte, yapay zeka destekli geli\u015ftirme ara\u00e7lar\u0131n\u0131n daha da ak\u0131ll\u0131 hale gelece\u011fi ve kimlik do\u011frulama sistemlerinin geli\u015ftirilmesinde standart bir ara\u00e7 haline gelece\u011fi tahmin edilmektedir. Bu sayede, geli\u015ftiriciler daha az manuel i\u015f y\u00fck\u00fcyle daha g\u00fcvenli ve yenilik\u00e7i \u00e7\u00f6z\u00fcmler \u00fcretebileceklerdir.<\/p>\n<p>\u00d6zetle, GitHub Copilot Chat ile kullan\u0131c\u0131 kimlik do\u011frulama sistemi kurmak, verimlili\u011fi art\u0131r\u0131rken ayn\u0131 zamanda g\u00fcvenlik risklerini azalt\u0131r. Ad\u0131m ad\u0131m kod \u00f6rnekleri, g\u00fcvenlik en iyi pratikleri ve h\u0131zl\u0131 hata ay\u0131klama yetenekleri sayesinde, geli\u015ftiriciler daha sa\u011flam, g\u00fcvenli ve kullan\u0131c\u0131 dostu uygulamalar in\u015fa edebilirler. G\u00fcvenlik bilincine sahip olmak ve yapay zeka destekli ara\u00e7lar\u0131 do\u011fru kullanmak, dijital gelece\u011fimizi daha g\u00fcvenli hale getirmenin anahtar\u0131d\u0131r.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<ul>\n<li>\n            <strong>1. GitHub Copilot Chat g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 tamamen \u00f6nleyebilir mi?<\/strong><br \/>\n            Copilot Chat, g\u00fcvenli kod yazma prati\u011fini te\u015fvik eder ve bilinen g\u00fcvenlik a\u00e7\u0131klar\u0131na kar\u015f\u0131 \u00f6nerilerde bulunabilir. Ancak, bir yapay zeka arac\u0131 oldu\u011fu i\u00e7in %100 g\u00fcvenlik garantisi veremez. Son kodun g\u00f6zden ge\u00e7irilmesi, g\u00fcvenlik denetimleri ve penetrasyon testleri insan sorumlulu\u011fundad\u0131r. Copilot bir asistan olup, nihai g\u00fcvenlik sorumlulu\u011fu geli\u015ftiriciye aittir.\n        <\/li>\n<li>\n            <strong>2. Hangi veritaban\u0131 kimlik do\u011frulama i\u00e7in en iyisidir?<\/strong><br \/>\n            Kimlik do\u011frulama i\u00e7in belirli bir \"en iyi\" veritaban\u0131 yoktur. \u0130li\u015fkisel (PostgreSQL, MySQL) veya NoSQL (MongoDB, Cassandra) veritabanlar\u0131 kullan\u0131labilir. \u00d6nemli olan, veritaban\u0131n\u0131n g\u00fc\u00e7l\u00fc \u015fifreleme mekanizmalar\u0131, uygun eri\u015fim kontrol\u00fc ve veri yedekleme \u00f6zelliklerine sahip olmas\u0131d\u0131r. Se\u00e7im, projenin \u00f6l\u00e7e\u011fine, mimarisine ve geli\u015ftirici ekibinin a\u015final\u0131\u011f\u0131na ba\u011fl\u0131d\u0131r.\n        <\/li>\n<li>\n            <strong>3. JWT mi, Session m\u0131 daha iyi?<\/strong><br \/>\n            Hem JWT'lerin hem de oturum tabanl\u0131 kimlik do\u011frulaman\u0131n avantajlar\u0131 ve dezavantajlar\u0131 vard\u0131r.<\/p>\n<ul>\n<li><strong>JWT:<\/strong> Durumsuz (stateless), \u00f6l\u00e7eklenebilir (microservices i\u00e7in ideal), mobil uygulamalarla uyumlu, \u00e7apraz alan (cross-domain) kimlik do\u011frulamas\u0131 kolay. Ancak token'\u0131n \u00e7al\u0131nmas\u0131 durumunda g\u00fcvenlik riski olabilir (kara liste gerektirebilir).<\/li>\n<li><strong>Session:<\/strong> Sunucu taraf\u0131nda oturum durumu y\u00f6netimi, daha kolay token iptali, CSRF sald\u0131r\u0131lar\u0131na kar\u015f\u0131 genellikle daha diren\u00e7li. Ancak \u00f6l\u00e7eklenebilirlik zorluklar\u0131 (sticky sessions) ve mobil uygulamalar i\u00e7in ek entegrasyon gerekebilir.<\/li>\n<\/ul>\n<p>            Se\u00e7im, uygulaman\u0131z\u0131n mimarisine, \u00f6l\u00e7eklenebilirlik ihtiya\u00e7lar\u0131na ve g\u00fcvenlik gereksinimlerine g\u00f6re yap\u0131lmal\u0131d\u0131r.\n        <\/li>\n<li>\n            <strong>4. Mobil uygulamalar i\u00e7in kimlik do\u011frulama nas\u0131l farkl\u0131la\u015f\u0131r?<\/strong><br \/>\n            Mobil uygulamalarda kimlik do\u011frulama genellikle JWT veya OAuth tabanl\u0131d\u0131r. Taray\u0131c\u0131 tabanl\u0131 oturum y\u00f6netimi (cookies) mobil uygulamalarda daha az kullan\u0131l\u0131r. G\u00fcvenlik a\u00e7\u0131s\u0131ndan, token'lar\u0131n cihaz\u0131n g\u00fcvenli depolama alanlar\u0131nda saklanmas\u0131 (keychain, encrypted storage) \u00f6nemlidir. Ayr\u0131ca biyometrik kimlik do\u011frulama (parmak izi, y\u00fcz tan\u0131ma) mobil uygulamalarda s\u0131k\u00e7a kullan\u0131l\u0131r.\n        <\/li>\n<li>\n            <strong>5. Kimlik do\u011frulama sistemleri test edilirken nelere dikkat edilmeli?<\/strong><br \/>\n            Kimlik do\u011frulama sistemleri test edilirken \u015fu noktalara dikkat edilmelidir:<\/p>\n<ul>\n<li><strong>Girdi Do\u011frulama:<\/strong> T\u00fcm form girdileri (e-posta, parola) sunucu taraf\u0131nda do\u011frulan\u0131yor mu? SQL Injection, XSS gibi sald\u0131r\u0131lar engelleniyor mu?<\/li>\n<li><strong>Parola G\u00fcvenli\u011fi:<\/strong> Parolalar do\u011fru bir \u015fekilde hashleniyor ve kar\u015f\u0131la\u015ft\u0131r\u0131l\u0131yor mu? Zay\u0131f parolalar engelleniyor mu?<\/li>\n<li><strong>Oturum Y\u00f6netimi:<\/strong> Token'lar ge\u00e7erlilik s\u00fcrelerine uyuyor mu? Token iptali (logout) do\u011fru \u00e7al\u0131\u015f\u0131yor mu? Token \u00e7al\u0131nmas\u0131na kar\u015f\u0131 \u00f6nlemler (refresh token, HTTP-only cookies) yeterli mi?<\/li>\n<li><strong>Yetkilendirme:<\/strong> Farkl\u0131 rollere sahip kullan\u0131c\u0131lar sadece kendilerine ait kaynaklara eri\u015febiliyor mu? Yetkisiz eri\u015fim denemeleri engelleniyor mu?<\/li>\n<li><strong>Hata \u0130\u015fleme:<\/strong> Hata mesajlar\u0131 genel ve bilgilendirici mi (\u00f6rne\u011fin \"Ge\u00e7ersiz e-posta veya parola\" yerine \"Kullan\u0131c\u0131 ad\u0131 veya parola hatal\u0131\" gibi ipucu vermeyen mesajlar)?<\/li>\n<li><strong>Y\u00fck Testleri:<\/strong> Yo\u011fun kullan\u0131c\u0131 trafi\u011fi alt\u0131nda sistem performans\u0131 nas\u0131l?<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Modern web uygulamalar\u0131, kullan\u0131c\u0131 verilerini korumak ve ki\u015fiselle\u015ftirilmi\u015f deneyimler sunmak i\u00e7in g\u00fc\u00e7l\u00fc bir kimlik do\u011frulama sistemine ihtiya\u00e7 duyar.&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1401],"tags":[],"class_list":{"0":"post-30375","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-git","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>GitHub Copilot Chat ile G\u00fcvenli Kimlik Do\u011frulama Sistemi Kurulumu<\/title>\n<meta name=\"description\" content=\"Modern web uygulamalar\u0131, kullan\u0131c\u0131 verilerini korumak ve ki\u015fiselle\u015ftirilmi\u015f deneyimler sunmak i\u00e7in g\u00fc\u00e7l\u00fc bir kimlik do\u011frulama sistemine ihtiya\u00e7 duyar. Peki, bu karma\u015f\u0131k s\u00fcreci GitHub Copilot Chat gibi yapay zeka destekli ara\u00e7larla nas\u0131l daha h\u0131zl\u0131, g\u00fcvenli ve hatas\u0131z hale getirebiliriz? Bu kapsaml\u0131 rehberde, s\u0131f\u0131rdan ba\u015flayarak tam te\u015fekk\u00fcll\u00fc bir kullan\u0131c\u0131 kimlik do\u011frulama sistemi in\u015fa etmenin inceliklerini, Copilot Chat&#039;in g\u00fcc\u00fcn\u00fc kullanarak ad\u0131m ad\u0131m ke\u015ffedece\u011fiz.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/github-copilot-chat-ile-guvenli-kimlik-dogrulama-sistemi-kurulumu\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"GitHub Copilot Chat ile G\u00fcvenli Kimlik Do\u011frulama Sistemi Kurulumu\" \/>\n<meta property=\"og:description\" content=\"Modern web uygulamalar\u0131, kullan\u0131c\u0131 verilerini korumak ve ki\u015fiselle\u015ftirilmi\u015f deneyimler sunmak i\u00e7in g\u00fc\u00e7l\u00fc bir kimlik do\u011frulama sistemine ihtiya\u00e7 duyar. Peki, bu karma\u015f\u0131k s\u00fcreci GitHub Copilot Chat gibi yapay zeka destekli ara\u00e7larla nas\u0131l daha h\u0131zl\u0131, g\u00fcvenli ve hatas\u0131z hale getirebiliriz? Bu kapsaml\u0131 rehberde, s\u0131f\u0131rdan ba\u015flayarak tam te\u015fekk\u00fcll\u00fc bir kullan\u0131c\u0131 kimlik do\u011frulama sistemi in\u015fa etmenin inceliklerini, Copilot Chat&#039;in g\u00fcc\u00fcn\u00fc kullanarak ad\u0131m ad\u0131m ke\u015ffedece\u011fiz.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/github-copilot-chat-ile-guvenli-kimlik-dogrulama-sistemi-kurulumu\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-09-26T23:32:01+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"32 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/github-copilot-chat-ile-guvenli-kimlik-dogrulama-sistemi-kurulumu\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/github-copilot-chat-ile-guvenli-kimlik-dogrulama-sistemi-kurulumu\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"GitHub Copilot Chat ile G\u00fcvenli Kimlik Do\u011frulama Sistemi Kurulumu\",\"datePublished\":\"2025-09-26T23:32:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/github-copilot-chat-ile-guvenli-kimlik-dogrulama-sistemi-kurulumu\/\"},\"wordCount\":5728,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Git\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/github-copilot-chat-ile-guvenli-kimlik-dogrulama-sistemi-kurulumu\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/github-copilot-chat-ile-guvenli-kimlik-dogrulama-sistemi-kurulumu\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/github-copilot-chat-ile-guvenli-kimlik-dogrulama-sistemi-kurulumu\/\",\"name\":\"GitHub Copilot Chat ile G\u00fcvenli Kimlik Do\u011frulama Sistemi Kurulumu\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-09-26T23:32:01+00:00\",\"description\":\"Modern web uygulamalar\u0131, kullan\u0131c\u0131 verilerini korumak ve ki\u015fiselle\u015ftirilmi\u015f deneyimler sunmak i\u00e7in g\u00fc\u00e7l\u00fc bir kimlik do\u011frulama sistemine ihtiya\u00e7 duyar. Peki, bu karma\u015f\u0131k s\u00fcreci GitHub Copilot Chat gibi yapay zeka destekli ara\u00e7larla nas\u0131l daha h\u0131zl\u0131, g\u00fcvenli ve hatas\u0131z hale getirebiliriz? Bu kapsaml\u0131 rehberde, s\u0131f\u0131rdan ba\u015flayarak tam te\u015fekk\u00fcll\u00fc bir kullan\u0131c\u0131 kimlik do\u011frulama sistemi in\u015fa etmenin inceliklerini, Copilot Chat'in g\u00fcc\u00fcn\u00fc kullanarak ad\u0131m ad\u0131m ke\u015ffedece\u011fiz.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/github-copilot-chat-ile-guvenli-kimlik-dogrulama-sistemi-kurulumu\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/github-copilot-chat-ile-guvenli-kimlik-dogrulama-sistemi-kurulumu\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/github-copilot-chat-ile-guvenli-kimlik-dogrulama-sistemi-kurulumu\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"GitHub Copilot Chat ile G\u00fcvenli Kimlik Do\u011frulama Sistemi Kurulumu\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"GitHub Copilot Chat ile G\u00fcvenli Kimlik Do\u011frulama Sistemi Kurulumu","description":"Modern web uygulamalar\u0131, kullan\u0131c\u0131 verilerini korumak ve ki\u015fiselle\u015ftirilmi\u015f deneyimler sunmak i\u00e7in g\u00fc\u00e7l\u00fc bir kimlik do\u011frulama sistemine ihtiya\u00e7 duyar. Peki, bu karma\u015f\u0131k s\u00fcreci GitHub Copilot Chat gibi yapay zeka destekli ara\u00e7larla nas\u0131l daha h\u0131zl\u0131, g\u00fcvenli ve hatas\u0131z hale getirebiliriz? Bu kapsaml\u0131 rehberde, s\u0131f\u0131rdan ba\u015flayarak tam te\u015fekk\u00fcll\u00fc bir kullan\u0131c\u0131 kimlik do\u011frulama sistemi in\u015fa etmenin inceliklerini, Copilot Chat'in g\u00fcc\u00fcn\u00fc kullanarak ad\u0131m ad\u0131m ke\u015ffedece\u011fiz.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/github-copilot-chat-ile-guvenli-kimlik-dogrulama-sistemi-kurulumu\/","og_locale":"tr_TR","og_type":"article","og_title":"GitHub Copilot Chat ile G\u00fcvenli Kimlik Do\u011frulama Sistemi Kurulumu","og_description":"Modern web uygulamalar\u0131, kullan\u0131c\u0131 verilerini korumak ve ki\u015fiselle\u015ftirilmi\u015f deneyimler sunmak i\u00e7in g\u00fc\u00e7l\u00fc bir kimlik do\u011frulama sistemine ihtiya\u00e7 duyar. Peki, bu karma\u015f\u0131k s\u00fcreci GitHub Copilot Chat gibi yapay zeka destekli ara\u00e7larla nas\u0131l daha h\u0131zl\u0131, g\u00fcvenli ve hatas\u0131z hale getirebiliriz? Bu kapsaml\u0131 rehberde, s\u0131f\u0131rdan ba\u015flayarak tam te\u015fekk\u00fcll\u00fc bir kullan\u0131c\u0131 kimlik do\u011frulama sistemi in\u015fa etmenin inceliklerini, Copilot Chat'in g\u00fcc\u00fcn\u00fc kullanarak ad\u0131m ad\u0131m ke\u015ffedece\u011fiz.","og_url":"https:\/\/fatihsoysal.com\/blog\/github-copilot-chat-ile-guvenli-kimlik-dogrulama-sistemi-kurulumu\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-09-26T23:32:01+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"32 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/github-copilot-chat-ile-guvenli-kimlik-dogrulama-sistemi-kurulumu\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/github-copilot-chat-ile-guvenli-kimlik-dogrulama-sistemi-kurulumu\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"GitHub Copilot Chat ile G\u00fcvenli Kimlik Do\u011frulama Sistemi Kurulumu","datePublished":"2025-09-26T23:32:01+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/github-copilot-chat-ile-guvenli-kimlik-dogrulama-sistemi-kurulumu\/"},"wordCount":5728,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Git"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/github-copilot-chat-ile-guvenli-kimlik-dogrulama-sistemi-kurulumu\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/github-copilot-chat-ile-guvenli-kimlik-dogrulama-sistemi-kurulumu\/","url":"https:\/\/fatihsoysal.com\/blog\/github-copilot-chat-ile-guvenli-kimlik-dogrulama-sistemi-kurulumu\/","name":"GitHub Copilot Chat ile G\u00fcvenli Kimlik Do\u011frulama Sistemi Kurulumu","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-09-26T23:32:01+00:00","description":"Modern web uygulamalar\u0131, kullan\u0131c\u0131 verilerini korumak ve ki\u015fiselle\u015ftirilmi\u015f deneyimler sunmak i\u00e7in g\u00fc\u00e7l\u00fc bir kimlik do\u011frulama sistemine ihtiya\u00e7 duyar. Peki, bu karma\u015f\u0131k s\u00fcreci GitHub Copilot Chat gibi yapay zeka destekli ara\u00e7larla nas\u0131l daha h\u0131zl\u0131, g\u00fcvenli ve hatas\u0131z hale getirebiliriz? Bu kapsaml\u0131 rehberde, s\u0131f\u0131rdan ba\u015flayarak tam te\u015fekk\u00fcll\u00fc bir kullan\u0131c\u0131 kimlik do\u011frulama sistemi in\u015fa etmenin inceliklerini, Copilot Chat'in g\u00fcc\u00fcn\u00fc kullanarak ad\u0131m ad\u0131m ke\u015ffedece\u011fiz.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/github-copilot-chat-ile-guvenli-kimlik-dogrulama-sistemi-kurulumu\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/github-copilot-chat-ile-guvenli-kimlik-dogrulama-sistemi-kurulumu\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/github-copilot-chat-ile-guvenli-kimlik-dogrulama-sistemi-kurulumu\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"GitHub Copilot Chat ile G\u00fcvenli Kimlik Do\u011frulama Sistemi Kurulumu"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/30375","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=30375"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/30375\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=30375"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=30375"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=30375"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}