﻿
{"id":26673,"date":"2023-11-30T20:36:33","date_gmt":"2023-11-30T20:36:33","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=26673"},"modified":"2023-11-30T20:36:33","modified_gmt":"2023-11-30T20:36:33","slug":"net-webapi-amazon-cognito-ile-guvenligin-saglanmasi-serverless-authentication-client-credentials-password-flows-jwt","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/net-webapi-amazon-cognito-ile-guvenligin-saglanmasi-serverless-authentication-client-credentials-password-flows-jwt\/","title":{"rendered":".NET WebAPI &#8211; Amazon Cognito ile G\u00fcvenli\u011fin Sa\u011flanmas\u0131: Serverless Authentication | Client Credentials | Password Flows | JWT"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu i\u00e7eri\u011fimizde, <em>Amazon Cognito<\/em> ile .NET WebAPI&#8217;\u0131n g\u00fcvenli\u011fini sa\u011flama konusunda kapsaml\u0131 bir inceleme \u00e7al\u0131\u015fmas\u0131 ger\u00e7ekle\u015ftiriyor olaca\u011f\u0131z. Odak noktam\u0131z, OAUth ve Amazon Cognito e\u015fli\u011finde <em>Serverless Authentication<\/em> sistemi olu\u015fturabilme \u00fczerine olacakt\u0131r. Bu i\u00e7eri\u011fin sonunda .NET WebAPI&#8217;lar\u0131n\u0131z\u0131n g\u00fcvence alt\u0131na almak i\u00e7in Amazon Cognito&#8217;yu nas\u0131l uygulayaca\u011f\u0131n\u0131z\u0131 tam teferruatl\u0131 anlam\u0131\u015f olacaks\u0131n\u0131z kanaatindeyim. O halde vakit kaybetmeksizin buyurun ba\u015flayal\u0131m&#8230;<\/p>\n<h3>Amazon Cognito Nedir?<\/h3>\n<p>Geli\u015ftirilen uygulaman\u0131n \u00f6l\u00e7e\u011fi ne olursa olsun kimlik do\u011frulama her daim \u00f6nem arz edecek olan kritik ihtiya\u00e7lardan birisidir. Bu ihtiyac\u0131 ister kendi \u00f6zel olu\u015fturdu\u011funuz kimlik do\u011frulama stratejisi ile isterseniz de third party provider&#8217;lar ile sa\u011flayabilir ve kullanabilirsiniz. Ya da isterseniz de AWS taraf\u0131ndan sa\u011flanan kullan\u0131c\u0131 kimlik ve y\u00f6netim hizmeti olan Amazon Cognito&#8217;yu da tercih edebilirsiniz.<\/p>\n<p>Amazon Cognito; kimlik do\u011frulama, kullan\u0131c\u0131 y\u00f6netimi ve veri senkronizasyonu gibi \u00f6zellikleri sa\u011flayarak uygulamalar\u0131n geli\u015ftirme s\u00fcre\u00e7lerinde pratikle\u015ftirici bir nitelik sa\u011flamaktad\u0131r.<\/p>\n<p>Amazon Cognito ile \u00f6zellikle mobil ve web uygulamalar\u0131 gibi farkl\u0131 platformlarda kullan\u0131c\u0131lar\u0131n kimliklerini do\u011frulamak i\u00e7in OAuth 2.0, OpenID Connect veya SAML vs. gibi standart kimlik sa\u011flay\u0131c\u0131lar\u0131 ile entegre olunabilmektedir. B\u00f6ylece .NET geli\u015ftiricileri olarak kendi kimlik do\u011frulama sistemimizi <a href=\"https:\/\/www.gencayyildiz.com\/blog\/openiddict-1-openiddict-nedir-ve-authorization-server-nasil-kurulur\/\" rel=\"noopener\" target=\"_blank\">OpenIddict<\/a> veya <a href=\"https:\/\/www.gencayyildiz.com\/blog\/identityserver4-yazi-serisi\/\" rel=\"noopener\" target=\"_blank\">IdentityServer4<\/a> gibi k\u00fct\u00fcphaneleri kullanarak geli\u015ftirmek yerine(ki bunlar hala ge\u00e7erli yakla\u015f\u0131mlard\u0131r), Amazon Cognito servisiyle olduk\u00e7a avantajl\u0131 ve efektif bir \u015fekilde kurgulayabiliriz.<\/p>\n<p>B\u00f6ylece;<\/p>\n<ul>\n<li>Amazon Cognito&#8217;nun sa\u011flayaca\u011f\u0131 ak\u0131c\u0131 bir kullan\u0131c\u0131 aray\u00fcz\u00fc \u00fczerinden nispeten kolay bir kullan\u0131c\u0131 y\u00f6netimi ve oturum i\u015flemleri ger\u00e7ekle\u015ftirilebilecek ve Facebook, Google vs. gibi harici identity provider&#8217;lar da basit ama etkili bir \u015fekilde desteklenebilecektir.<\/li>\n<li>Herhangi bir altyap\u0131 ihtiyac\u0131na dair endi\u015feye gerek kalmaks\u0131z\u0131n; Amazon Cognito, istenilen say\u0131da kullan\u0131c\u0131ya uyum sa\u011flayacak \u015fekilde \u00f6l\u00e7eklenebilecektir.<\/li>\n<li>\u00d6zelle\u015ftirilmi\u015f kimlik do\u011frulama sitemi tasarlarken, potansiyel hatalar\u0131n ve a\u00e7\u0131klar\u0131n olu\u015fma olas\u0131l\u0131\u011f\u0131 olduk\u00e7a d\u00fc\u015f\u00fck olacak ve b\u00f6ylece birinci s\u0131n\u0131f g\u00fcvenlik sa\u011flanacakt\u0131r.<\/li>\n<li>Di\u011fer AWS servisleriyle olan entegrasyon kolayca y\u00fcr\u00fct\u00fclebilecektir.<\/li>\n<li>Ve son olarak t\u00fcm bu \u00f6zellikler ayl\u0131k 50.000 aktif kullan\u0131c\u0131ya ve external identity provider a\u00e7\u0131s\u0131ndan da 50 kullan\u0131c\u0131n\u0131n oturum a\u00e7mas\u0131na kadar \u00fccretsiz olarak kullan\u0131labilecektir. Ha e\u011fer ki bu s\u0131n\u0131rlar\u0131n a\u015f\u0131lmas\u0131 gerekiyorsa bunun da olduk\u00e7a makul fiyat politikas\u0131yla ger\u00e7ekle\u015ftirilmesi m\u00fcmk\u00fcnd\u00fcr. <a href=\"https:\/\/aws.amazon.com\/tr\/cognito\/pricing\/\" rel=\"noopener\" target=\"_blank\">https:\/\/aws.amazon.com\/tr\/cognito\/pricing\/<\/a><\/li>\n<\/ul>\n<h3>Ne \u0130n\u015fa Edece\u011fiz?<\/h3>\n<p>Amazon Cognito&#8217;yu kullanarak serverless bir authentication sistemi taraf\u0131ndan g\u00fcvenli\u011fi sa\u011flanan Web API geli\u015ftirece\u011fiz. Bu API&#8217;daki authentication, Amazon Cognito User Pool taraf\u0131ndan olu\u015fturulan JWT&#8217;ye dayanacakt\u0131r.<\/p>\n<p>Bunun i\u00e7in ilk olarak Cognito&#8217;da <a href=\"https:\/\/www.gencayyildiz.com\/blog\/openiddict-2-client-credentials-flow\/\" rel=\"noopener\" target=\"_blank\">client credentials<\/a> ve <a href=\"https:\/\/www.gencayyildiz.com\/blog\/identityserver4-yazi-serisi-10-resource-owner-credentials-grantflow\/\" rel=\"noopener\" target=\"_blank\">password flow<\/a> ayarlamalar\u0131n\u0131 ger\u00e7ekle\u015ftirecek ve daha sonra da bu ak\u0131\u015flar\u0131n bize belirli bir kullan\u0131c\u0131 i\u00e7in token \u00fcretebilme yetene\u011fini test edece\u011fiz. Bu i\u015flem tamamland\u0131\u011f\u0131nda, Amazon Cognito taraf\u0131ndan g\u00fcvenli hale getirilen API&#8217;\u0131 olu\u015fturacak ve bu API&#8217;\u0131n her iki ak\u0131\u015ftan gelen token&#8217;lar\u0131 alabildi\u011fini ve g\u00fcvenli bir API endpoint&#8217;ine yap\u0131lan request&#8217;leri do\u011frulayabildi\u011fini kontrol edece\u011fiz.<\/p>\n<h3>Client Credential Flow &#038; Password Grant Flow<\/h3>\n<p>Client Credential Flow&#8217;da client(yani geli\u015ftirece\u011fimiz Web API), access token kar\u015f\u0131l\u0131\u011f\u0131nda Cognito&#8217;ya client id ve secret de\u011ferlerini iletecek ve herhangi bir kullan\u0131c\u0131 onay\u0131na ihtiya\u00e7 duymaks\u0131z\u0131n client yetkilendirilecektir.<\/p>\n<p>Password Grant Flow ise kullan\u0131c\u0131n\u0131n kaynaklar\u0131na eri\u015fmek i\u00e7in bir server authentication yap\u0131lmas\u0131 gerekmektedir. Dolay\u0131s\u0131yla bu noktada kullan\u0131c\u0131 ad\u0131 ve \u015fifre gibi kullan\u0131c\u0131 bilgilerinin g\u00f6nderilmesi elzemdir.<\/p>\n<h3>Amazon Cognito User Pool Olu\u015fturma<\/h3>\n<p>\u015eimdi ilk olarak Amazon Cognito User Pool olu\u015fturmaya odaklanal\u0131m. Bunun i\u00e7in AWS&#8217;ye giri\u015f yapal\u0131m ve AWS Console \u00fczerinden Cognito&#8217;yu aratal\u0131m.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT.png\" alt=\".NET WebAPI - Amazon Cognito ile G\u00fcvenli\u011fin Sa\u011flanmas\u0131: Serverless Authentication | Client Credentials | Password Flows | JWT\" width=\"583\" height=\"264\" class=\"aligncenter size-full wp-image-26717\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT.png 583w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-300x136.png 300w\" sizes=\"auto, (max-width: 583px) 100vw, 583px\" \/><\/a>A\u015fa\u011f\u0131da g\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere <em>Cognito user pool<\/em> sekmesini se\u00e7iyor ve oturum a\u00e7ma se\u00e7ene\u011fi i\u00e7in de kullan\u0131c\u0131 ad\u0131 ve \u015fifreyi se\u00e7iyoruz. Turuncu k\u0131s\u0131mdaki &#8216;Federated identity providers&#8217; se\u00e7ene\u011fi ise Google, Facebook vs. gibi third party identity provider&#8217;lar\u0131 ile ilgilidir. <a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-1.png\" alt=\".NET WebAPI - Amazon Cognito ile G\u00fcvenli\u011fin Sa\u011flanmas\u0131: Serverless Authentication | Client Credentials | Password Flows | JWT\" width=\"1087\" height=\"834\" class=\"aligncenter size-full wp-image-26720\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-1.png 1087w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-1-300x230.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-1-1024x786.png 1024w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-1-768x589.png 768w\" sizes=\"auto, (max-width: 1087px) 100vw, 1087px\" \/><\/a>Devam\u0131nda ise Cognito&#8217;nun varsay\u0131lan \u015fifre politikas\u0131n\u0131 se\u00e7iyoruz.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-2.png\" alt=\".NET WebAPI - Amazon Cognito ile G\u00fcvenli\u011fin Sa\u011flanmas\u0131: Serverless Authentication | Client Credentials | Password Flows | JWT\" width=\"1084\" height=\"611\" class=\"aligncenter size-full wp-image-26723\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-2.png 1084w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-2-300x169.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-2-1024x577.png 1024w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-2-768x433.png 768w\" sizes=\"auto, (max-width: 1084px) 100vw, 1084px\" \/><\/a>2. ad\u0131mda sayfay\u0131 biraz daha a\u015fa\u011f\u0131 indirdi\u011fimizde Multi-factor authentication(\u00e7ok fakt\u00f6rl\u00fc kimlik do\u011frulama) davran\u0131\u015f\u0131yla ilgili yap\u0131land\u0131rmay\u0131 g\u00f6rece\u011fiz. Her ne kadar kaynaklar\u0131 koruman\u0131n g\u00fcvenli bir yolu olsa da bizler bu i\u00e7eri\u011fimizde multi-factor authentication&#8217;a dair herhangi bir \u00e7al\u0131\u015fma yapmayaca\u011f\u0131z.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-3.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-3.png\" alt=\".NET WebAPI - Amazon Cognito ile G\u00fcvenli\u011fin Sa\u011flanmas\u0131: Serverless Authentication | Client Credentials | Password Flows | JWT\" width=\"726\" height=\"848\" class=\"aligncenter size-full wp-image-26724\" \/><\/a>Devam\u0131nda ise 3. ad\u0131m\u0131 varsay\u0131lan ayarlar\u0131nda b\u0131rakarak direkt ge\u00e7ebiliriz. Amma velakin 4. ad\u0131mda onay mailene dair yap\u0131land\u0131rmada bulunabilmek i\u00e7in Cognito&#8217;nun varsay\u0131lan e-posta adresinden istifade edebiliriz.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-4.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-4.png\" alt=\".NET WebAPI - Amazon Cognito ile G\u00fcvenli\u011fin Sa\u011flanmas\u0131: Serverless Authentication | Client Credentials | Password Flows | JWT\" width=\"1085\" height=\"743\" class=\"aligncenter size-full wp-image-26727\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-4.png 1085w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-4-300x205.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-4-1024x701.png 1024w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-4-768x526.png 768w\" sizes=\"auto, (max-width: 1085px) 100vw, 1085px\" \/><\/a>Ard\u0131ndan olu\u015fturdu\u011fumuz bu user pool&#8217;a bir isim verelim. Ayr\u0131ca <em>Use the Cognito Hosted UI<\/em> se\u00e7ene\u011fini etkinle\u015ftirerek g\u00f6rseldeki gibi bir Cognito domain alal\u0131m.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-5.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-5.png\" alt=\".NET WebAPI - Amazon Cognito ile G\u00fcvenli\u011fin Sa\u011flanmas\u0131: Serverless Authentication | Client Credentials | Password Flows | JWT\" width=\"870\" height=\"828\" class=\"aligncenter size-full wp-image-26728\" \/><\/a>Ve son olarak 5. ad\u0131mda sayfan\u0131n az a\u015fa\u011f\u0131s\u0131na gelirsek e\u011fer user pool application client yap\u0131land\u0131rmas\u0131nda bulunaca\u011f\u0131z. Burada token olu\u015fturmas\u0131 i\u00e7in client credential grant type flow&#8217;u y\u00f6netmekten sorumlu bir client olu\u015fturaca\u011f\u0131z.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-6.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-6.png\" alt=\".NET WebAPI - Amazon Cognito ile G\u00fcvenli\u011fin Sa\u011flanmas\u0131: Serverless Authentication | Client Credentials | Password Flows | JWT\" width=\"646\" height=\"733\" class=\"aligncenter size-full wp-image-26729\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-6.png 646w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-6-264x300.png 264w\" sizes=\"auto, (max-width: 646px) 100vw, 646px\" \/><\/a>Yukar\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcnde oldu\u011fu gibi client credential flow a\u00e7\u0131s\u0131ndan olduk\u00e7a \u00f6nemli olan <em>Generate a client secret<\/em>&#8216;\u0131n se\u00e7ili oldu\u011fundan emin olman\u0131zda fayda var. Ayr\u0131ca callback url olarak \u015fimdilik sahte bir de\u011feri girelim ve user pool&#8217;u olu\u015ftural\u0131m.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-7.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-7.png\" alt=\".NET WebAPI - Amazon Cognito ile G\u00fcvenli\u011fin Sa\u011flanmas\u0131: Serverless Authentication | Client Credentials | Password Flows | JWT\" width=\"1535\" height=\"257\" class=\"aligncenter size-full wp-image-26732\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-7.png 1535w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-7-300x50.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-7-1024x171.png 1024w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-7-768x129.png 768w\" sizes=\"auto, (max-width: 1535px) 100vw, 1535px\" \/><\/a><\/p>\n<h3>Client Credentials Flow: Kurulum ve Test<\/h3>\n<p>\u015eimdi bu olu\u015fturdu\u011fumuz user pool client&#8217;\u0131nda client credentials flow&#8217;u uygulayaca\u011f\u0131z. Zaten g\u00fcvenlik nedenleriyle ayn\u0131 user pool client&#8217;\u0131nda birden fazla flow uygulanamamaktad\u0131r. Bu nedenle i\u00e7eri\u011fimizin sonraki sat\u0131rlar\u0131nda password grant flow&#8217;u uygularken de bunun i\u00e7in yeni bir client olu\u015fturuyor olaca\u011f\u0131z.<\/p>\n<p>Client credential flow&#8217;un temel fikri; client&#8217;\u0131n kullan\u0131c\u0131 kimlik bilgileri yerine, client id ve client secret gibi kendisine ait kimlik bilgileri e\u015fli\u011finde Amazon Cognito&#8217;dan authentication yapmas\u0131 \u00fczerine kuruludur. Bu ak\u0131\u015f genellikle protected edilmi\u015f resource&#8217;lara eri\u015fimi sa\u011flayabilmek i\u00e7in sadece client&#8217;\u0131n yetkilendirilmesinin yeterli oldu\u011fu senaryolarda tercih edilmektedir. Bizlerde bu senaryoya benzer bir \u00e7al\u0131\u015fma yapaca\u011f\u0131m\u0131zdan dolay\u0131 eri\u015fim a\u00e7\u0131s\u0131ndan \u00f6rneklendirmeyi sa\u011flayabilmek i\u00e7in bir resource server&#8217;a ihtiyac\u0131m\u0131z s\u00f6z konusudur.<\/p>\n<p>Bunun i\u00e7in yukar\u0131daki sat\u0131rlarda olu\u015fturdu\u011fumuz &#8216;cognito-example&#8217; isimli user pool&#8217;a girelim ve a\u015fa\u011f\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcnde oldu\u011fu gibi &#8216;App integration&#8217; sekmesi \u00fczerinden &#8216;Resource servers&#8217; alan\u0131nda &#8216;Create resource server&#8217; butonuna t\u0131klayal\u0131m.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT.gif\" alt=\".NET WebAPI - Amazon Cognito ile G\u00fcvenli\u011fin Sa\u011flanmas\u0131: Serverless Authentication | Client Credentials | Password Flows | JWT\" width=\"800\" height=\"481\" class=\"aligncenter size-full wp-image-26735\" \/><\/a>Resource server&#8217;\u0131 a\u015fa\u011f\u0131daki gibi olu\u015ftural\u0131m. Tabi burada dikkat edilmesi gereken nokta \u015fudur ki, olu\u015fturulacak bu resource server&#8217;a bir scope eklendi\u011finden emin olunmas\u0131 gerekmektedir. G\u00f6rselde de g\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere ben olu\u015fturulan resouce server ismiyle birebir ayn\u0131 olan de\u011feri ekliyorum. Bu de\u011fere yaz\u0131n\u0131n sonraki seyrinde JWT olu\u015ftururken ihtiyac\u0131m\u0131z oldu\u011funu g\u00f6receksiniz&#8230;<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-8.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-8.png\" alt=\".NET WebAPI - Amazon Cognito ile G\u00fcvenli\u011fin Sa\u011flanmas\u0131: Serverless Authentication | Client Credentials | Password Flows | JWT\" width=\"644\" height=\"795\" class=\"aligncenter size-full wp-image-26736\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-8.png 644w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-8-243x300.png 243w\" sizes=\"auto, (max-width: 644px) 100vw, 644px\" \/><\/a>Ve ard\u0131ndan resource server&#8217;\u0131n olu\u015fturuldu\u011funu g\u00f6zlemleyelim.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-9.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-9.png\" alt=\".NET WebAPI - Amazon Cognito ile G\u00fcvenli\u011fin Sa\u011flanmas\u0131: Serverless Authentication | Client Credentials | Password Flows | JWT\" width=\"770\" height=\"206\" class=\"aligncenter size-full wp-image-26737\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-9.png 770w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-9-300x80.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-9-768x205.png 768w\" sizes=\"auto, (max-width: 770px) 100vw, 770px\" \/><\/a>Bu i\u015flemden sonra yine user pool \u00fczerinden \u00f6nceki sat\u0131rlarda olu\u015fturmu\u015f oldu\u011fumuz &#8216;example-client&#8217; isimli application client&#8217;a gidelim ve &#8216;Hosted UI&#8217; b\u00f6l\u00fcm\u00fcne ilerleyelim. Bunun i\u00e7in a\u015fa\u011f\u0131daki g\u00f6rselde oldu\u011fu gibi &#8216;App integration&#8217; sekmesi \u00fczerinden &#8216;App clients and analytics&#8217; ba\u015fl\u0131\u011f\u0131 alt\u0131ndan eri\u015fim g\u00f6sterilebilmektedir.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-1.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-1.gif\" alt=\".NET WebAPI - Amazon Cognito ile G\u00fcvenli\u011fin Sa\u011flanmas\u0131: Serverless Authentication | Client Credentials | Password Flows | JWT\" width=\"800\" height=\"392\" class=\"aligncenter size-full wp-image-26738\" \/><\/a>Bu ad\u0131mda a\u015fa\u011f\u0131daki g\u00f6rselde oldu\u011fu gibi &#8216;Identity providers&#8217;\u0131n &#8216;Cognito user pool&#8217; ve &#8216;OAuth 2.0 grant types&#8217;\u0131n da &#8216;Client credentials&#8217; oldu\u011fundan emin olunuz. Ayr\u0131ca, daha \u00f6nce olu\u015fturdu\u011fumuz scope&#8217;u da &#8216;Custom scopes&#8217; k\u0131sm\u0131nda se\u00e7ti\u011fimize dikkatinizi \u00e7ekerim.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-10.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-10.png\" alt=\".NET WebAPI - Amazon Cognito ile G\u00fcvenli\u011fin Sa\u011flanmas\u0131: Serverless Authentication | Client Credentials | Password Flows | JWT\" width=\"780\" height=\"557\" class=\"aligncenter size-full wp-image-26739\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-10.png 780w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-10-300x214.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-10-768x548.png 768w\" sizes=\"auto, (max-width: 780px) 100vw, 780px\" \/><\/a>Evet, credential flow i\u00e7in yap\u0131lmas\u0131 gereken t\u00fcm \u00e7al\u0131\u015fmalar bunlardan ibaret. Art\u0131k olu\u015fturdu\u011fumuz &#8216;example-client&#8217;\u0131n detay\u0131na giderek client id ve client secret de\u011ferlerini g\u00f6rebilir ve istedi\u011fimiz yere depolayabiliriz.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-11.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-11.png\" alt=\".NET WebAPI - Amazon Cognito ile G\u00fcvenli\u011fin Sa\u011flanmas\u0131: Serverless Authentication | Client Credentials | Password Flows | JWT\" width=\"580\" height=\"404\" class=\"aligncenter size-full wp-image-26740\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-11.png 580w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-11-300x209.png 300w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a>\u015eimdi client credential flow&#8217;u kullanarak bir JWT token olu\u015fturma testi ger\u00e7ekle\u015ftirelim. Bunun i\u00e7in ben deniz Insomnia aray\u00fcz\u00fcn\u00fc kullanaca\u011f\u0131m. Ha tabi ki de sizler isterseniz Postman ya da farkl\u0131 bir ara\u00e7lardan istifade edebilirsiniz.<\/p>\n<p>JWT olu\u015fturabilmek i\u00e7in a\u015fa\u011f\u0131daki url&#8217;e verilen parametreler e\u015fli\u011finde bir POST request&#8217;i g\u00f6ndermemiz yeterlidir.<\/p>\n<blockquote><p>https:\/\/{domain}.auth.{region}.amazoncognito.com\/oauth2\/token<\/p><\/blockquote>\n<p>Buradaki domain ve region bilgilerini pe\u015finen elde etmek i\u00e7in olu\u015fturulan user pool&#8217;un &#8216;App integration&#8217; sekmesi alt\u0131ndaki &#8216;Domain&#8217; ba\u015fl\u0131\u011f\u0131na g\u00f6z atabilirsiniz.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-12.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-12.png\" alt=\".NET WebAPI - Amazon Cognito ile G\u00fcvenli\u011fin Sa\u011flanmas\u0131: Serverless Authentication | Client Credentials | Password Flows | JWT\" width=\"752\" height=\"788\" class=\"aligncenter size-full wp-image-26741\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-12.png 752w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-12-286x300.png 286w\" sizes=\"auto, (max-width: 752px) 100vw, 752px\" \/><\/a>Velhas\u0131l iste\u011fi a\u015fa\u011f\u0131daki parametreler e\u015fli\u011finde g\u00f6nderelim.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-13.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-13.png\" alt=\".NET WebAPI - Amazon Cognito ile G\u00fcvenli\u011fin Sa\u011flanmas\u0131: Serverless Authentication | Client Credentials | Password Flows | JWT\" width=\"1623\" height=\"278\" class=\"aligncenter size-full wp-image-26742\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-13.png 1623w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-13-300x51.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-13-1024x175.png 1024w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-13-768x132.png 768w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-13-1536x263.png 1536w\" sizes=\"auto, (max-width: 1623px) 100vw, 1623px\" \/><\/a>G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere taraf\u0131m\u0131zca client credential flow kullan\u0131larak yap\u0131lan istek, Amazon Cognito&#8217;da do\u011fruland\u0131 ve bir access token \u00fcreterek, elde etmemizi sa\u011flad\u0131. \u015eimdi bu JWT de\u011ferini <a href=\"https:\/\/jwt.io\/\" rel=\"noopener\" target=\"_blank\">jwt.io<\/a>&#8216;da decode ederek incelersek e\u011fer;<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-14.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-14.png\" alt=\".NET WebAPI - Amazon Cognito ile G\u00fcvenli\u011fin Sa\u011flanmas\u0131: Serverless Authentication | Client Credentials | Password Flows | JWT\" width=\"873\" height=\"492\" class=\"aligncenter size-full wp-image-26743\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-14.png 873w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-14-300x169.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-14-768x433.png 768w\" sizes=\"auto, (max-width: 873px) 100vw, 873px\" \/><\/a>i\u00e7erisinde client_id ve scope bilgileri e\u015fli\u011finde datalar\u0131n bulundu\u011fu g\u00f6rmekteyiz.<\/p>\n<p>\u0130\u00e7eri\u011fimizin bu noktas\u0131na kadar client credential flow&#8217;a odakl\u0131 \u00e7al\u0131\u015f\u0131p, test ama\u00e7l\u0131 bir do\u011frulama ger\u00e7ekle\u015ftirmi\u015f bulunuyoruz. Bir sonraki ad\u0131mda password grant flow&#8217;a odaklanacak ve kullan\u0131c\u0131 ad\u0131 ile birlikte \u015fifresini kullanaca\u011f\u0131m\u0131z \u00e7al\u0131\u015fmalar\u0131 ger\u00e7ekle\u015ftirece\u011fiz.<\/p>\n<h3>Password Grant Flow: Kurulum ve Test<\/h3>\n<p>\u015eimdi de password grant flow authentication i\u00e7in ba\u015fka bir application client olu\u015fturmam\u0131z gerekmektedir. Bunun i\u00e7in a\u015fa\u011f\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcnde oldu\u011fu gibi &#8216;cognito-example&#8217; isminde olu\u015fturdu\u011fumuz user pool \u00fczerinden &#8216;App integration&#8217; sekmesine gelelim, oradan da sayfan\u0131n biraz a\u015fa\u011f\u0131s\u0131ndaki &#8216;App client list&#8217; k\u0131sm\u0131ndan &#8216;Create app client&#8217; butonuna t\u0131klayarak yeni client olu\u015fturma sayfas\u0131na gelelim.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-2.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-2.gif\" alt=\".NET WebAPI - Amazon Cognito ile G\u00fcvenli\u011fin Sa\u011flanmas\u0131: Serverless Authentication | Client Credentials | Password Flows | JWT\" width=\"800\" height=\"433\" class=\"aligncenter size-full wp-image-26745\" \/><\/a>Bu sefer de dikkat ederseniz &#8216;example-password-client&#8217; ad\u0131nda bir client olu\u015fturuyoruz. Burada dikkat edilmesi gereken nokta ise a\u015fa\u011f\u0131daki g\u00f6rselde vurguland\u0131\u011f\u0131 gibi art\u0131k gerek duyulmayaca\u011f\u0131ndan dolay\u0131 bir secret key olu\u015fturtmuyoruz.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-15.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-15.png\" alt=\".NET WebAPI - Amazon Cognito ile G\u00fcvenli\u011fin Sa\u011flanmas\u0131: Serverless Authentication | Client Credentials | Password Flows | JWT\" width=\"794\" height=\"666\" class=\"aligncenter size-full wp-image-26747\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-15.png 794w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-15-300x252.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-15-768x644.png 768w\" sizes=\"auto, (max-width: 794px) 100vw, 794px\" \/><\/a>Sayfada hafif a\u015fa\u011f\u0131 inersek e\u011fer &#8216;Authentication flows&#8217; k\u0131sm\u0131nda <code>ALLOW_USER_PASSWORD_AUTH<\/code> de\u011ferini se\u00e7elim. Bunun d\u0131\u015f\u0131nda a\u015fa\u011f\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcnde oldu\u011fu gibi olu\u015fturulacak token&#8217;a dair expiration de\u011ferlerini kendinize ya da i\u015f kurallar\u0131n\u0131za g\u00f6re belirleyebilirsiniz. Biz varsay\u0131lan de\u011ferlere ba\u011fl\u0131 kalarak yola devam edelim.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-16.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-16.png\" alt=\".NET WebAPI - Amazon Cognito ile G\u00fcvenli\u011fin Sa\u011flanmas\u0131: Serverless Authentication | Client Credentials | Password Flows | JWT\" width=\"777\" height=\"699\" class=\"aligncenter size-full wp-image-26749\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-16.png 777w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-16-300x270.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-16-768x691.png 768w\" sizes=\"auto, (max-width: 777px) 100vw, 777px\" \/><\/a>Devam\u0131nda ise sayfay\u0131 biraz daha a\u015fa\u011f\u0131 indirerek &#8216;Hosted UI settings&#8217; k\u0131sm\u0131na gelelim ve bir callback url belirleyelim.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-17.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-17.png\" alt=\".NET WebAPI - Amazon Cognito ile G\u00fcvenli\u011fin Sa\u011flanmas\u0131: Serverless Authentication | Client Credentials | Password Flows | JWT\" width=\"772\" height=\"667\" class=\"aligncenter size-full wp-image-26750\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-17.png 772w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-17-300x259.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-17-768x664.png 768w\" sizes=\"auto, (max-width: 772px) 100vw, 772px\" \/><\/a>Tabi burada &#8216;Identity providers&#8217; olarak &#8216;Cognito user pool&#8217;u se\u00e7ti\u011fimizden ve &#8216;OAuth 2.0 grant types&#8217;\u0131 da a\u015fa\u011f\u0131daki gibi &#8216;Implicit grant&#8217; se\u00e7ti\u011fimizden emin olal\u0131m.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-18.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-18.png\" alt=\".NET WebAPI - Amazon Cognito ile G\u00fcvenli\u011fin Sa\u011flanmas\u0131: Serverless Authentication | Client Credentials | Password Flows | JWT\" width=\"774\" height=\"671\" class=\"aligncenter size-full wp-image-26751\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-18.png 774w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-18-300x260.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-18-768x666.png 768w\" sizes=\"auto, (max-width: 774px) 100vw, 774px\" \/><\/a>Ve nihai olarak client&#8217;\u0131m\u0131z\u0131 olu\u015ftural\u0131m.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-19.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-19.png\" alt=\".NET WebAPI - Amazon Cognito ile G\u00fcvenli\u011fin Sa\u011flanmas\u0131: Serverless Authentication | Client Credentials | Password Flows | JWT\" width=\"368\" height=\"327\" class=\"aligncenter size-full wp-image-26752\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-19.png 368w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-19-300x267.png 300w\" sizes=\"auto, (max-width: 368px) 100vw, 368px\" \/><\/a>Bu ad\u0131mdan sonra art\u0131k bir kullan\u0131c\u0131 olu\u015fturmam\u0131z gerekecektir. Bunun i\u00e7in tekrardan olu\u015fturdu\u011fumuz user pool&#8217;a gelelim ve &#8216;Users&#8217; sekmesi \u00fczerinden kullan\u0131c\u0131 olu\u015fturma i\u015flemini a\u015fa\u011f\u0131daki gibi ger\u00e7ekle\u015ftirelim.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-20.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-20.png\" alt=\".NET WebAPI - Amazon Cognito ile G\u00fcvenli\u011fin Sa\u011flanmas\u0131: Serverless Authentication | Client Credentials | Password Flows | JWT\" width=\"805\" height=\"839\" class=\"aligncenter size-full wp-image-26753\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-20.png 805w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-20-288x300.png 288w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-20-768x800.png 768w\" sizes=\"auto, (max-width: 805px) 100vw, 805px\" \/><\/a>G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere &#8216;\u015fuayip&#8217; ad\u0131nda bir kullan\u0131c\u0131 olu\u015fturmu\u015f bulunuyoruz.<\/p>\n<blockquote><p> Haz\u0131r laf\u0131 ge\u00e7mi\u015fken buradan \u015euayip abiye de selamlar olsun\ud83e\udd1a\ud83e\udd78<\/p><\/blockquote>\n<p>Ha tabi burada girilen \u015fifrenin ge\u00e7ici oldu\u011funu da unutmamak laz\u0131m.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-21.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-21.png\" alt=\".NET WebAPI - Amazon Cognito ile G\u00fcvenli\u011fin Sa\u011flanmas\u0131: Serverless Authentication | Client Credentials | Password Flows | JWT\" width=\"1323\" height=\"198\" class=\"aligncenter size-full wp-image-26758\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-21.png 1323w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-21-300x45.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-21-1024x153.png 1024w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-21-768x115.png 768w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-21-1320x198.png 1320w\" sizes=\"auto, (max-width: 1323px) 100vw, 1323px\" \/><\/a>G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere kullan\u0131c\u0131 olu\u015fturulmu\u015f ve etkinle\u015ftirilmi\u015ftir. Lakin &#8216;Confirmation status&#8217;e g\u00f6z atarsan\u0131z \u015fifreyi de\u011fi\u015ftirmemiz gerekti\u011fini s\u00f6ylemektedir. Bunun i\u00e7in AWS CLI&#8217;den a\u015fa\u011f\u0131daki gibi istifade edebiliriz.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\naws cognito-idp admin-set-user-password --user-pool-id &quot;&lt;user-pool-id&gt;&quot;  --username &quot;&lt;username&gt;&quot; --password &quot;&lt;permanent-password&gt;&quot; --permanent\r\n<\/pre>\n<p>Bizler misal olarak, bu talimat\u0131 a\u015fa\u011f\u0131daki gibi kullanal\u0131m;<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\naws cognito-idp admin-set-user-password --user-pool-id &quot;us-east-1_Vol2qyQFn&quot;  --username &quot;\u015fuayip&quot; --password &quot;1q2w3E4'&quot; --permanent\r\n<\/pre>\n<div style=\"font-size:12px;line-height: 15px;text-align:center;color:green;\"><em>AWS CLI komutunu \u00e7al\u0131\u015ft\u0131rabilmek i\u00e7in AWS Credentials ve profile bilgilerini bilgisayar\u0131n\u0131zda \u00f6nceden ayarlam\u0131\u015f olman\u0131z gerekmektedir. Konuya dair <a href=\"https:\/\/www.gencayyildiz.com\/blog\/net-uygulamalari-icin-detayli-aws-credentials-konfigurasyonu\/\" rel=\"noopener\" target=\"_blank\">.NET Uygulamalar\u0131 \u0130\u00e7in Detayl\u0131 AWS Credentials Konfig\u00fcrasyonu<\/a> ba\u015fl\u0131kl\u0131 makalemi okuman\u0131z\u0131 tavsiye ederim.<\/em><\/div>\n<p>Bu i\u015flem tamamland\u0131ktan sonra ekledi\u011fimiz kullan\u0131c\u0131n\u0131n onaylanm\u0131\u015f oldu\u011funu g\u00f6receksiniz.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-22.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-22.png\" alt=\".NET WebAPI - Amazon Cognito ile G\u00fcvenli\u011fin Sa\u011flanmas\u0131: Serverless Authentication | Client Credentials | Password Flows | JWT\" width=\"1496\" height=\"208\" class=\"aligncenter size-full wp-image-26761\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-22.png 1496w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-22-300x42.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-22-1024x142.png 1024w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-22-768x107.png 768w\" sizes=\"auto, (max-width: 1496px) 100vw, 1496px\" \/><\/a>\u015eimdi bu vaziyette testimizi ger\u00e7ekle\u015ftirebiliriz.<\/p>\n<p>Biliyorsunuz ki, password grant flow&#8217;da user credentials bilgilerinin sunucuya iletilmesi gerekmektedir. Bunun i\u00e7in de OAuth 2.0 protokol\u00fc kapsam\u0131nda ger\u00e7ekle\u015fecek olan yetkilendirme i\u015flemlerini destekleyecek header&#8217;lar e\u015fli\u011finde request&#8217;te bulunmam\u0131z gerekmektedir. Haliyle <code>https:\/\/cognito-idp.{region}.amazonaws.com\/<\/code> adresine a\u015fa\u011f\u0131daki ayarlarda bir POST iste\u011finde bulunulmas\u0131 gerekmektedir.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-23.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-23.png\" alt=\".NET WebAPI - Amazon Cognito ile G\u00fcvenli\u011fin Sa\u011flanmas\u0131: Serverless Authentication | Client Credentials | Password Flows | JWT\" width=\"677\" height=\"201\" class=\"aligncenter size-full wp-image-26762\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-23.png 677w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-23-300x89.png 300w\" sizes=\"auto, (max-width: 677px) 100vw, 677px\" \/><\/a>Yap\u0131lacak iste\u011fin header&#8217;lar\u0131na yukar\u0131daki g\u00f6rsel \u00fczerinden g\u00f6z atarsak e\u011fer; &#8216;Content-Type&#8217;a kar\u015f\u0131l\u0131k AWS taraf\u0131ndan JSON format\u0131na kar\u015f\u0131n belirlenmi\u015f g\u00fcvenli ve tutarl\u0131 bir standart olan <code>application\/x-amz-json-1.1<\/code> de\u011ferini veriyoruz. B\u00f6ylece AWS Cognito Identity Provider API&#8217;\u0131yla kuraca\u011f\u0131m\u0131z ileti\u015fimde g\u00f6nderece\u011fimiz kullan\u0131c\u0131 ad\u0131 ve \u015fifre gibi verilerin bi\u00e7imini ifade etmi\u015f oluyoruz.<\/p>\n<p>&#8216;X-Amz-Target&#8217; ba\u015fl\u0131\u011f\u0131na kar\u015f\u0131l\u0131k ise <code>AWSCognitoIdentityProviderService.InitiateAuth<\/code> de\u011ferini veriyoruz. B\u00f6ylece yap\u0131lacak request&#8217;in hangi AWS servisine gidece\u011fini ifade etmi\u015f oluyoruz. Bu header&#8217;lar e\u015fli\u011finde request&#8217;in body&#8217;sini de a\u015fa\u011f\u0131daki gibi ayarlayal\u0131m.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-24.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-24.png\" alt=\".NET WebAPI - Amazon Cognito ile G\u00fcvenli\u011fin Sa\u011flanmas\u0131: Serverless Authentication | Client Credentials | Password Flows | JWT\" width=\"333\" height=\"206\" class=\"aligncenter size-full wp-image-26763\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-24.png 333w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-24-300x186.png 300w\" sizes=\"auto, (max-width: 333px) 100vw, 333px\" \/><\/a>Burada olu\u015fturdu\u011fumuz client&#8217;\u0131n id de\u011feri e\u015fli\u011finde gerekli olan t\u00fcm bilgileri verdikten sonra istekte bulunal\u0131m.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-25.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-25.png\" alt=\".NET WebAPI - Amazon Cognito ile G\u00fcvenli\u011fin Sa\u011flanmas\u0131: Serverless Authentication | Client Credentials | Password Flows | JWT\" width=\"1218\" height=\"602\" class=\"aligncenter size-full wp-image-26764\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-25.png 1218w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-25-300x148.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-25-1024x506.png 1024w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-25-768x380.png 768w\" sizes=\"auto, (max-width: 1218px) 100vw, 1218px\" \/><\/a>Vee g\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere &#8216;AccessToken&#8217;, &#8216;IdToken&#8217; ve &#8216;RefreshToken&#8217;lar olu\u015fturulup, taraf\u0131m\u0131zca elde edilmi\u015ftir.<\/p>\n<p>\u015eimdi i\u00e7eri\u011fimizin seyri a\u00e7\u0131s\u0131ndan client credential flow ve password grant flow&#8217;u inceledi\u011fimize g\u00f6re geriye, serverless authentication i\u015flemini kullanarak taraf\u0131m\u0131zca olu\u015fturulmu\u015f olan bir Asp.NET Core Web API uygulamas\u0131n\u0131n g\u00fcvenli\u011fini sa\u011flamak kalm\u0131\u015ft\u0131r.<\/p>\n<h3>Amazon Cognito \u0130le Web API&#8217;\u0131n G\u00fcvenli\u011fini Sa\u011flama<\/h3>\n<p>\u0130lk olarak bir Asp.NET Core Web API projesi olu\u015ftural\u0131m ve ard\u0131ndan ilgili projeye a\u015fa\u011f\u0131daki k\u00fct\u00fcphaneleri y\u00fckleyelim.<\/p>\n<ul>\n<li><a href=\"https:\/\/www.nuget.org\/packages\/Amazon.AspNetCore.Identity.Cognito\/\" rel=\"noopener\" target=\"_blank\">Amazon.AspNetCore.Identity.Cognito<\/a><\/li>\n<li><a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.AspNetCore.Authentication.JwtBearer\" rel=\"noopener\" target=\"_blank\">Microsoft.AspNetCore.Authentication.JwtBearer<\/a><\/li>\n<\/ul>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-26.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-26.png\" alt=\".NET WebAPI - Amazon Cognito ile G\u00fcvenli\u011fin Sa\u011flanmas\u0131: Serverless Authentication | Client Credentials | Password Flows | JWT\" width=\"484\" height=\"114\" class=\"aligncenter size-full wp-image-26765\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-26.png 484w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-26-300x71.png 300w\" sizes=\"auto, (max-width: 484px) 100vw, 484px\" \/><\/a>Gerekli paketleri y\u00fckledikten sonra uygulaman\u0131n yap\u0131land\u0131rmas\u0131n\u0131 a\u015fa\u011f\u0131daki gibi ger\u00e7ekle\u015ftirelim;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nusing Microsoft.AspNetCore.Authentication.JwtBearer;\r\nusing Microsoft.AspNetCore.Authorization;\r\n\r\nvar builder = WebApplication.CreateBuilder(args);\r\n\r\nbuilder.Services.AddCognitoIdentity();\r\n\r\nbuilder.Services\r\n    .AddAuthentication(options =&gt;\r\n    {\r\n        options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;\r\n        options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;\r\n    })\r\n    .AddJwtBearer(options =&gt;\r\n    {\r\n        \/\/                   https:\/\/cognito-idp.{region}.amazonaws.com\/{user-pool-id}\r\n        options.Authority = &quot;https:\/\/cognito-idp.us-east-1.amazonaws.com\/us-east-1_Vol2qyQFn&quot;;\r\n        options.TokenValidationParameters = new()\r\n        {\r\n            ValidateIssuerSigningKey = true,\r\n            ValidateAudience = false\r\n        };\r\n    });\r\n\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;, &#x5B;Authorize] () =&gt;\r\n{\r\n    return Results.Ok(true);\r\n});\r\n\r\napp.Run();\r\n<\/pre>\n<p>Yukar\u0131daki kod blo\u011funa g\u00f6z atarsan\u0131z e\u011fer; <strong><em>6.<\/em><\/strong> sat\u0131rda <code>AddCognitoIdentity<\/code> metodu ile uygulaman\u0131n authentication ve authorization s\u00fcre\u00e7leri Cognito API&#8217;lar\u0131na g\u00f6re yap\u0131land\u0131r\u0131lmakta ve <strong><em>8<\/em><\/strong> ile <strong><em>23.<\/em><\/strong> sat\u0131r aral\u0131\u011f\u0131nda ise JWT bearer authentication&#8217;a g\u00f6re \u015femalar ayarlanmakta ve \u00f6zellikle authorization server olarakta <strong><em>17.<\/em><\/strong> sat\u0131rda Cognito belirlenmektedir. <strong><em>32<\/em><\/strong> ve <strong><em>35.<\/em><\/strong> sat\u0131r aral\u0131\u011f\u0131nda ise authorize edilerek olu\u015fturulmu\u015f olan bir minimal api mevcuttur.<\/p>\n<p>\u015eimdi bizler bu API&#8217;a direkt bir istekte bulunursak a\u015fa\u011f\u0131daki g\u00f6rselden de anla\u015f\u0131laca\u011f\u0131 \u00fczere 401 Unauthorized durumuyla kar\u015f\u0131la\u015faca\u011f\u0131z.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-27.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-27.png\" alt=\".NET WebAPI - Amazon Cognito ile G\u00fcvenli\u011fin Sa\u011flanmas\u0131: Serverless Authentication | Client Credentials | Password Flows | JWT\" width=\"522\" height=\"40\" class=\"aligncenter size-full wp-image-26766\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-27.png 522w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-27-300x23.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-27-520x40.png 520w\" sizes=\"auto, (max-width: 522px) 100vw, 522px\" \/><\/a>Bu vaziyette Cognito&#8217;dan password grant flow neticesinde gelen access_token de\u011ferini a\u015fa\u011f\u0131daki gibi ilgili iste\u011fin header&#8217;lar\u0131nda &#8216;Authorization&#8217; key&#8217;ine kar\u015f\u0131l\u0131k <code>Bearer ....<\/code> \u015feklinde verirsek a\u015fa\u011f\u0131daki g\u00f6rselde oldu\u011fu gibi iste\u011fin ba\u015far\u0131yla ger\u00e7ekle\u015ftirildi\u011fini g\u00f6rm\u00fc\u015f oluyoruz.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-28.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-28.png\" alt=\".NET WebAPI - Amazon Cognito ile G\u00fcvenli\u011fin Sa\u011flanmas\u0131: Serverless Authentication | Client Credentials | Password Flows | JWT\" width=\"470\" height=\"163\" class=\"aligncenter size-full wp-image-26767\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-28.png 470w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/NET-WebAPI-Amazon-Cognito-ile-Guvenligin-Saglanmasi-Serverless-Authentication-Client-Credentials-Password-Flows-JWT-28-300x104.png 300w\" sizes=\"auto, (max-width: 470px) 100vw, 470px\" \/><\/a>Nihai olarak;<br \/>\nGeli\u015ftirdi\u011fimiz yaz\u0131l\u0131m sistemlerinde kritik noktalardan biri olan authentication ve authorization yap\u0131lanmalar\u0131n\u0131 k\u00e2h yaz\u0131l\u0131m dahilinde geli\u015ftirebilir, k\u00e2h merkezi bir authorization server kurmam\u0131z\u0131 sa\u011flayan <a href=\"https:\/\/www.gencayyildiz.com\/blog\/openiddict-1-openiddict-nedir-ve-authorization-server-nasil-kurulur\/\" rel=\"noopener\" target=\"_blank\">OpenIddict<\/a> veya <a href=\"https:\/\/www.gencayyildiz.com\/blog\/identityserver4-yazi-serisi\/\" rel=\"noopener\" target=\"_blank\">IdentityServer4<\/a> gibi haz\u0131r k\u00fct\u00fcphaneler e\u015fli\u011finde in\u015fa edebiliriz. T\u00fcm bunlar\u0131n d\u0131\u015f\u0131nda cloud tabanl\u0131 olan AWS Cognito sayesinde hem authentication ve authorization sorumluluklar\u0131n\u0131 yap\u0131land\u0131rabilece\u011fimiz gibi hem de kullan\u0131c\u0131 y\u00f6netimi ve Facebook, Google vs. gibi sosyal kimlik sa\u011flay\u0131c\u0131lar\u0131yla entegrasyon gibi \u00e7e\u015fitli yetenekleri de kolayl\u0131kla ger\u00e7ekle\u015ftirebiliriz. Tercih; \u00f6nce gereksinimlerin, sonra sizin \ud83d\ude42<\/p>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\nSonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<p>Not : \u00d6rnek \u00e7al\u0131\u015fmay\u0131 a\u015fa\u011f\u0131daki github adresinden edinebilirsiniz.<br \/>\n<a href=\"https:\/\/github.com\/gncyyldz\/Amazon.Cognito.Example\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/gncyyldz\/Amazon.Cognito.Example<\/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, Bu i\u00e7eri\u011fimizde, Amazon Cognito ile .NET WebAPI&#8217;\u0131n g\u00fcvenli\u011fini sa\u011flama konusunda kapsaml\u0131 bir inceleme \u00e7al\u0131\u015fmas\u0131 ger\u00e7ekle\u015ftiriyor olaca\u011f\u0131z. Odak noktam\u0131z, OAUth ve Amazon Cognito e\u015fli\u011finde Serverless Authentication sistemi olu\u015fturabilme \u00fczerine olacakt\u0131r. Bu i\u00e7eri\u011fin sonunda .NET&#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":26768,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4730],"tags":[4757,4957,4981,4979,4980,4956],"class_list":["post-26673","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-aws","tag-amazon-cognito","tag-amazon-cognito-nedir","tag-amazon-cognito-user-pool","tag-client-credential-flow","tag-password-grant-flow","tag-serverless-authentication"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/26673","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=26673"}],"version-history":[{"count":17,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/26673\/revisions"}],"predecessor-version":[{"id":26769,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/26673\/revisions\/26769"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/26768"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=26673"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=26673"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=26673"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}