﻿
{"id":28363,"date":"2026-02-02T00:28:36","date_gmt":"2026-02-02T00:28:36","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=28363"},"modified":"2026-02-02T00:28:36","modified_gmt":"2026-02-02T00:28:36","slug":"keycloakda-authentication-identity-identity-provider-ile-birlikte-authentication-flowlari-teorik-olarak-inceleyelim-5","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/keycloakda-authentication-identity-identity-provider-ile-birlikte-authentication-flowlari-teorik-olarak-inceleyelim-5\/","title":{"rendered":"Keycloak&#8217;da Authentication, Identity, Identity Provider \u0130le Birlikte Authentication Flow\u2019lar\u0131 Teorik Olarak \u0130nceleyelim #5"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<br \/>\n<br \/>\nModern kimlik ve eri\u015fim y\u00f6netimi (IAM) \u00e7\u00f6z\u00fcmlerinde kullan\u0131c\u0131y\u0131 do\u011frulamak art\u0131k tek ba\u015f\u0131na yeterli de\u011fildir. Do\u011frulaman\u0131n hangi ba\u011flamda, hangi ad\u0131mlarla ve hangi ko\u015fullara ba\u011fl\u0131 olarak ger\u00e7ekle\u015fti\u011fi en az sonucun kendisi kadar kritik arz etmektedir. Keycloak&#8217;\u0131n en g\u00fc\u00e7l\u00fc bile\u015fenlerinden biri olan <em>Authentication Flow<\/em> yap\u0131s\u0131, tam da bu noktada devreye girerek kimlik do\u011frulama s\u00fcrecini esnek, ko\u015fullu ve geni\u015fletilebilir bir mimariye d\u00f6n\u00fc\u015ft\u00fcrmektedir. Bizler bu i\u00e7eri\u011fimizde; <em>Authentication Flow<\/em> kavram\u0131n\u0131n neyi ifade etti\u011finden ba\u015flayarak <em>Browser Flow<\/em> ile <em>Direct Grant Flow<\/em> aras\u0131ndaki temel farklara de\u011finecek, bir flow&#8217;un yap\u0131 ta\u015flar\u0131n\u0131 olu\u015fturan <em>Execution<\/em>&#8216;lar\u0131n nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 de\u011ferlendirecek ve <em>Conditional Flow<\/em> mant\u0131\u011f\u0131yla dinamik do\u011frulama senaryolar\u0131n\u0131n nas\u0131l kurguland\u0131\u011f\u0131n\u0131 inceleyece\u011fiz. B\u00f6ylece nihai olarak Keycloak&#8217;\u0131n sundu\u011fu <em>Service Provider Interface (SPI)<\/em> mekanizmas\u0131 ile tamamen \u00f6zel authentication flow&#8217;lar\u0131n nas\u0131l geli\u015ftirilebilece\u011fini teoride derinlemesine ele alm\u0131\u015f ve sonraki i\u00e7eriklerde deneyimleyece\u011fimiz pratik dokunu\u015flara bir zemin haz\u0131rlam\u0131\u015f olaca\u011f\u0131z. O halde haz\u0131rsan\u0131z ba\u015flayal\u0131m&#8230;<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_88 counter-hierarchy ez-toc-counter ez-toc-light-blue ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Ba\u015fl\u0131klar<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"\u0130\u00e7indekiler Tablosunu A\u00e7\/Kapat\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.gencayyildiz.com\/blog\/keycloakda-authentication-identity-identity-provider-ile-birlikte-authentication-flowlari-teorik-olarak-inceleyelim-5\/#Authentication_Nedir\" >Authentication Nedir?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.gencayyildiz.com\/blog\/keycloakda-authentication-identity-identity-provider-ile-birlikte-authentication-flowlari-teorik-olarak-inceleyelim-5\/#Identity_Nedir\" >Identity Nedir?<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.gencayyildiz.com\/blog\/keycloakda-authentication-identity-identity-provider-ile-birlikte-authentication-flowlari-teorik-olarak-inceleyelim-5\/#Peki_Identity_Provider_IdP_nedir\" >Peki Identity Provider (IdP) nedir?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.gencayyildiz.com\/blog\/keycloakda-authentication-identity-identity-provider-ile-birlikte-authentication-flowlari-teorik-olarak-inceleyelim-5\/#Identityde_%E2%80%98Federation_ve_%E2%80%98Broker_Ne_Demektir\" >Identity&#8217;de &#8216;Federation&#8217; ve &#8216;Broker&#8217; Ne Demektir?<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.gencayyildiz.com\/blog\/keycloakda-authentication-identity-identity-provider-ile-birlikte-authentication-flowlari-teorik-olarak-inceleyelim-5\/#Authentication_Flow_Nedir\" >Authentication Flow Nedir?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.gencayyildiz.com\/blog\/keycloakda-authentication-identity-identity-provider-ile-birlikte-authentication-flowlari-teorik-olarak-inceleyelim-5\/#Keycloakta_Flow_Turleri_Nelerdir\" >Keycloak&#8217;ta Flow T\u00fcrleri Nelerdir?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.gencayyildiz.com\/blog\/keycloakda-authentication-identity-identity-provider-ile-birlikte-authentication-flowlari-teorik-olarak-inceleyelim-5\/#Execution_Nedir\" >Execution Nedir?<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.gencayyildiz.com\/blog\/keycloakda-authentication-identity-identity-provider-ile-birlikte-authentication-flowlari-teorik-olarak-inceleyelim-5\/#Execution_Typelar\" >Execution Type&#8217;lar<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/www.gencayyildiz.com\/blog\/keycloakda-authentication-identity-identity-provider-ile-birlikte-authentication-flowlari-teorik-olarak-inceleyelim-5\/#Browser_Authentication_Flowu_Executionlarina_Bolelim\" >Browser Authentication Flow&#8217;u Execution&#8217;lar\u0131na B\u00f6lelim<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h4><span class=\"ez-toc-section\" id=\"Authentication_Nedir\"><\/span>Authentication Nedir?<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<blockquote style=\"font-size:14px;\"><p><em>Authentication, &#8220;bu kullan\u0131c\u0131 ger\u00e7ekten s\u00f6yledi\u011fi ki\u015fi mi?&#8221; sorusuna verilen cevapt\u0131r&#8230;<\/em><\/p><\/blockquote>\n<p>Yolda y\u00fcr\u00fcyorsun&#8230; Polis durdurdu: <em>Kimli\u011fini ver<\/em> dedi&#8230; Burada kimlik, bir do\u011frulama arac\u0131yken, polisin yapt\u0131\u011f\u0131 ise authentication&#8217;d\u0131r. Benzer mant\u0131kla, bankamati\u011fe kart\u0131 soktun ve \u015fifreyi girdin&#8230; Banka diyor ki: <em>Bu kart ve bu \u015fifre&#8230; evet bu sensin&#8230;<\/em> Bu da bir authentication durumudur. Yaz\u0131l\u0131m d\u00fcnyas\u0131nda da authentication ayn\u0131 mant\u0131kla seyretmektedir. Bilgisayar; senin y\u00fcz\u00fcn\u00fc bilmez, sesini tan\u0131maz. Haliyle bir API&#8217;yi kullanabilmen i\u00e7in senden bir do\u011frulama kan\u0131t\u0131 ister. Bu kan\u0131t; kullan\u0131c\u0131 ad\u0131 + \u015fifre olabilir, telefona gelen kod olabilir, Google hesab\u0131n olabilir, parmak izi yahut herhangi bir sertifika olabilir&#8230; Evet, bunlar\u0131n her biri yaz\u0131l\u0131m a\u00e7\u0131s\u0131ndan birer authentication davran\u0131\u015flar\u0131d\u0131r. Sadece hangi y\u00f6ntemle do\u011frulaman\u0131n yap\u0131laca\u011f\u0131 <em>Authentication Flow<\/em> ile belirlenir&#8230;<\/p>\n<p>Yani bir yaz\u0131l\u0131m a\u00e7\u0131s\u0131ndan authentication, ama\u00e7 olarak kullan\u0131c\u0131 do\u011frulamak olsa da, s\u00fcre\u00e7 olarak; kullan\u0131c\u0131n\u0131n hangi y\u00f6ntemle do\u011fruland\u0131\u011f\u0131n\u0131, bu do\u011frulama s\u00fcrecinde hangi ad\u0131mlar\u0131n (\u015fifre mi, OTP mi, SMS mi, captcha m\u0131 vs.) izlendi\u011fini ve bu ad\u0131mlar\u0131n hangi s\u0131rayla ve hangi \u015fartlarla \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 belirleyen bir ak\u0131\u015fa (flow) ya da bir ba\u015fka deyi\u015fle davran\u0131\u015fa sahip olan bir s\u00fcre\u00e7tir.<\/p>\n<h4><span class=\"ez-toc-section\" id=\"Identity_Nedir\"><\/span>Identity Nedir?<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<blockquote style=\"font-size:14px;\"><p><em>Identity, &#8220;bu herif kim?&#8221; sorusunun cevab\u0131d\u0131r&#8230;<\/em><\/p><\/blockquote>\n<p>Identity, sistemin tan\u0131d\u0131\u011f\u0131 bir kullan\u0131c\u0131n\u0131n kim oldu\u011funu ifade eder. Ama dikkat ediniz!!! Hen\u00fcz do\u011frulanm\u0131\u015f olmay\u0131 de\u011fil, tan\u0131ml\u0131 olmay\u0131 ifade etmektedir. Bir identity&#8217;nin ger\u00e7ekten o kullan\u0131c\u0131 olup olmamas\u0131n\u0131n do\u011frulanma s\u00fcreci ise authentication&#8217;d\u0131r.<\/p>\n<p><strong>Davran\u0131\u015fsal olarak authentication, identity&#8217;den \u00f6nce de\u011fil mi?<\/strong><br \/>\nDavran\u0131\u015fsal olarak evet, authentication identity&#8217;den \u00f6nce gibi g\u00f6r\u00fcn\u00fcr, ancak kavramsal olarak identity daha \u00f6nceliklidir!<\/p>\n<p>Burada ak\u0131\u015fa bakmakta fayda vard\u0131r&#8230; \u015e\u00f6yle ki;<\/p>\n<ol style=\"font-size:12px;\">\n<li>Kullan\u0131c\u0131 gelir<\/li>\n<li>Kullan\u0131c\u0131 ad\u0131 ve \u015fifreyi g\u00f6nderir<\/li>\n<li>Sistem do\u011frular<\/li>\n<li>Sonra &#8216;bu X ki\u015fisiymi\u015f&#8217; der<\/li>\n<\/ol>\n<p>Bu ak\u0131\u015f insana \u00f6nce authentication oldu, sonra identity bulundu hissiyat\u0131 verecektir. Ama bu sadece alg\u0131sald\u0131r. Halbuki identity zaten vard\u0131r! \u00c7\u00fcnk\u00fc authentication bir identity olu\u015fturmamakta, icat etmemektedir. Sadece verilen credential bilgileri do\u011frultusunda mevcut bir identity ile e\u015fle\u015ftirme sa\u011flamaktad\u0131r.<\/p>\n<p>Yani bat\u0131ni boyutta ger\u00e7ek = <em style=\"font-size:14px;\">Credential \u2192 Identity lookup \u2192 Do\u011frulama \u2192 Kabul<\/em> mant\u0131\u011f\u0131nda seyretmektedir.<\/p>\n<blockquote style=\"font-size:14px;\"><p><em>Authentication, identity&#8217;nin varl\u0131\u011f\u0131n\u0131 varsayarak \u00e7al\u0131\u015f\u0131r.<\/em><\/p><\/blockquote>\n<p>Bunu daha da netle\u015ftirebilmek i\u00e7in \u015f\u00f6yle g\u00fczel bir \u00f6rnek verebiliriz :<\/p>\n<ul style=\"font-size:12px;\">\n<li>Kullan\u0131c\u0131 username ve password&#8217;\u00fc girer<\/li>\n<li>Keycloak \u015funu yapar:\n<ul>\n<li>&#8220;Bu username&#8217;e kar\u015f\u0131l\u0131k gelen identity var m\u0131?&#8221; diye sorar<\/li>\n<li>Varsa \u015fifreyi do\u011frular<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Haliyle esas buyken bizler s\u00fcreci d\u0131\u015far\u0131dan sanki; kullan\u0131c\u0131n\u0131n kendini kan\u0131tlama \u00e7al\u0131\u015fmas\u0131 (authentication) neticesinde, sistemin sonucu identity olarak a\u00e7\u0131klamas\u0131 olarak alg\u0131l\u0131yoruz. Yani yan\u0131l\u0131yoruz \ud83d\ude42<\/p>\n<h5><span class=\"ez-toc-section\" id=\"Peki_Identity_Provider_IdP_nedir\"><\/span>Peki Identity Provider (IdP) nedir?<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Kullan\u0131c\u0131y\u0131 tan\u0131tan yerin ta kendisidir. Yani ilgili kullan\u0131c\u0131n\u0131n kimli\u011fini kim onayl\u0131yorsa o identity provider&#8217;d\u0131r. \u00d6rnek olarak; Google hesab\u0131yla bir sisteme giriyorsan\u0131z e\u011fer o noktada Google identity provider&#8217;\u0131 kullan\u0131yorsunuz demektir, yok e\u011fer \u015firket i\u00e7i Active Directory ile ya da LDAP sayesinde giri\u015fte bulunuyorsan\u0131z identity provider&#8217;\u0131n\u0131z bunlard\u0131r demektir.<\/p>\n<p><strong>Ee peki ba\u015fka bir Keycloak sistemi \u00fczerinden do\u011frulama yap\u0131labilir mi?<\/strong><\/p>\n<p>Evet, bir sistem Keycloak kullans\u0131n ya da kullanmas\u0131n ba\u015fka bir Keycloak kullanan sistem \u00fczerinden giri\u015fe izin verebilir. \u0130\u015fte bu taktirde o sistemde de identity provider Keycloak olacakt\u0131r.<\/p>\n<p>Yani identity provider;<\/p>\n<ul style=\"font-size:12px;\">\n<li>Kullan\u0131c\u0131 kimli\u011fini do\u011frular.<\/li>\n<li>Do\u011frulama ba\u015far\u0131l\u0131ysa bu kimli\u011fi temsil eden bir \u00e7\u0131kt\u0131 \u00fcretir. Bu \u00e7\u0131kt\u0131 genelde JWT, SAML Assertion gibi token ya da do\u011frulanm\u0131\u015f identity claim&#8217;leri olabilir.<\/li>\n<li>Bu \u00e7\u0131kt\u0131y\u0131 ba\u015fka sistemlerin g\u00fcvenle kullanmas\u0131n\u0131 sa\u011flar.<\/li>\n<\/ul>\n<blockquote style=\"font-size:14px;\"><p><em>Identity Provider (IdP), authentication sorumlulu\u011funu \u00fcstlenen ve bu i\u015flem neticesinde bir identity \u00fcretip bunu ba\u015fkalar\u0131na kan\u0131tlanabilir bir \u015fekilde sunan sistemdir.<\/em><\/p><\/blockquote>\n<p>Keycloak, Azure Active Directory (Azure AD \/ Entra ID), Google, Facebook, GitHub vs. yayg\u0131n olarak kullan\u0131lan identity provider \u00f6rnekleridir&#8230;<\/p>\n<h5><span class=\"ez-toc-section\" id=\"Identityde_%E2%80%98Federation_ve_%E2%80%98Broker_Ne_Demektir\"><\/span>Identity&#8217;de &#8216;Federation&#8217; ve &#8216;Broker&#8217; Ne Demektir?<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Identity d\u00fcnyas\u0131nda tek bir kimlik kayna\u011f\u0131na ba\u011fl\u0131 kalmamak gibi bir problem vard\u0131r. Federation ve Broker, bu problemi iki farkl\u0131 mimari yakla\u015f\u0131m\u0131yla \u00e7\u00f6zmektedir.<\/p>\n<ul style=\"font-size:15px;\">\n<li><em><strong>Federation (Kimlik Federasyonu) Nedir?<\/strong><\/em><br \/>\n<blockquote style=\"font-size:14px;\"><p><em>Federation, farkl\u0131 organizasyonlar \/ domain&#8217;ler aras\u0131nda kimlik payla\u015f\u0131m\u0131n\u0131 m\u00fcmk\u00fcn k\u0131lmak i\u00e7indir&#8230;<\/em><\/p><\/blockquote>\n<p>Keycloak&#8217;un kullan\u0131c\u0131y\u0131 kendi veritaban\u0131nda tutmad\u0131\u011f\u0131 do\u011frudan harici bir user store \u00fczerinden do\u011frulad\u0131\u011f\u0131 senaryolarda kullan\u0131l\u0131r. Bu mimaride Keycloak, kimlik do\u011frulama sorumlulu\u011funu d\u0131\u015f sisteme devreder ve kullan\u0131c\u0131 bilgileri harici sistemde authoritative kabul edilir.<\/p>\n<p>LDAP, Active Directory ve Kerberos tipik federation kaynaklar\u0131d\u0131r.<\/p>\n<p><u>Ak\u0131\u015f mant\u0131\u011f\u0131<\/u><\/p>\n<ol style=\"font-size:12px;\">\n<li>Kullan\u0131c\u0131 kullan\u0131c\u0131 ad\u0131 ve \u015fifre g\u00f6nderir<\/li>\n<li>Keycloak bu bilgileri LDAP veya Active Directory&#8217;e iletir<\/li>\n<li>Do\u011frulama ger\u00e7ekle\u015ftirilir<\/li>\n<li>Keycloak bir token \u00fcretir<\/li>\n<\/ol>\n<p>Dikkat ederseniz burada, kimlik do\u011frulama yetkisi Keycloak&#8217;ta de\u011fil, d\u0131\u015f sistemdedir, ancak token yine Keycloak taraf\u0131ndan \u00fcretilmektedir.<\/p>\n<p>Kritik nokta \u015fudur ki; bu senaryoda Keycloak bir identity provider olarak de\u011fil de identity gateway \/ proxy gibi davran\u0131\u015f sergilemektedir.\n<\/li>\n<li><em><strong>Broker (Identity Brokering) Nedir?<\/strong><\/em><br \/>\nKeycloak&#8217;un kendi kullan\u0131c\u0131 havuzuna sahip oldu\u011fu ama kullan\u0131c\u0131y\u0131 ba\u015fka bir IdP&#8217;ye y\u00f6nlendirerek do\u011frulatt\u0131\u011f\u0131 senaryolar i\u00e7in uygun olan bir mimaridir.<\/p>\n<p>Google, Azure AD, GitHub ya da ba\u015fka bir Keycloak vs. bizler i\u00e7in g\u00fcncel birer broker kaynaklar\u0131d\u0131r&#8230;<\/p>\n<p><u>Ak\u0131\u015f mant\u0131\u011f\u0131<\/u><\/p>\n<ol style=\"font-size:12px;\">\n<li>Kullan\u0131c\u0131 login ister<\/li>\n<li>Keycloak:\n<ul>\n<li>&#8220;Bu kullan\u0131c\u0131y\u0131 ben do\u011frulamayaca\u011f\u0131m&#8221; der<\/li>\n<li>Ve harici IdP&#8217;ye y\u00f6nlendirir<\/li>\n<\/ul>\n<\/li>\n<li>Harici IdP:\n<ul>\n<li>Kullan\u0131c\u0131y\u0131 do\u011frular<\/li>\n<li>Bir assertion \/ id_token d\u00f6ner<\/li>\n<\/ul>\n<\/li>\n<li>Keycloak:\n<ul>\n<li>Bu sonucu kabul eder<\/li>\n<li>Kendi realm&#8217;inde kullan\u0131c\u0131y\u0131 olu\u015fturur ve e\u015fler<\/li>\n<li>Kendi token&#8217;\u0131n\u0131 \u00fcretir<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>Evet, bu yakla\u015f\u0131mda da dikkat ederseniz kimlik ba\u015fka IdP&#8217;de do\u011frulan\u0131rken; token olu\u015fturma ise Keycloak taraf\u0131ndan ger\u00e7ekle\u015ftirilmektedir.\n<\/li>\n<\/ul>\n<h4><span class=\"ez-toc-section\" id=\"Authentication_Flow_Nedir\"><\/span>Authentication Flow Nedir?<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<blockquote style=\"font-size:14px;\"><p><em>Authentication Flow, sisteme girmek isteyen bir kullan\u0131c\u0131n\u0131n ger\u00e7ekten kim oldu\u011funu kan\u0131tlamas\u0131 i\u00e7in izlenen ad\u0131mlar zinciridir&#8230;<\/em><\/p><\/blockquote>\n<p>Authentication Flow, bir kullan\u0131c\u0131 kimli\u011finin do\u011frulanmas\u0131 i\u00e7in hangi ad\u0131mlar\u0131n, hangi s\u0131rayla ve hangi ko\u015fularda \u00e7al\u0131\u015faca\u011f\u0131n\u0131 tan\u0131mlayan ak\u0131\u015ft\u0131r.<\/p>\n<p><strong>Authentication Flow neyi \u00e7\u00f6zer?<\/strong><br \/>\nAuthentication Flow esas\u0131nda \u015fu sorular\u0131n cevab\u0131n\u0131 belirler;<\/p>\n<ul style=\"font-size:15px;\">\n<li>Kimlik do\u011frulama nas\u0131l ba\u015flayacak?<\/li>\n<li>Hangi kontroller yap\u0131lacak?<\/li>\n<li>Hangi s\u0131rayla yap\u0131lacak?<\/li>\n<li>Bir ad\u0131m ba\u015far\u0131s\u0131z olursa ne olacak?<\/li>\n<li>Ko\u015fula ba\u011fl\u0131 (conditional) ad\u0131mlar olacak m\u0131?<\/li>\n<\/ul>\n<p>Yani anlayaca\u011f\u0131n\u0131z, kullan\u0131c\u0131 authentication olurken sistem taraf\u0131ndan <em style=\"font-size:14px;\">&#8220;\u015fifre mi soray\u0131m, OTP mi isteyeyim, cihaz g\u00fcvenilir mi de\u011fil mi ona m\u0131 bakay\u0131m, captcha m\u0131 koyay\u0131m, ne halt edeyim?&#8221;<\/em> tarz\u0131 durumlar\u0131n hepsi flow&#8217;un konusudur.<\/p>\n<p>Teoride olaya bakt\u0131\u011f\u0131m\u0131zda authentication flow, bir <a href=\"https:\/\/www.gencayyildiz.com\/blog\/tag\/state-machine\/\" target=\"_blank\">state machine<\/a> gibi davran\u0131\u015f sergileme durumudur. \u00c7\u00fcnk\u00fc, ak\u0131\u015f s\u00fcrecinin her bir ad\u0131m\u0131 bir execution&#8217;d\u0131r <span style=\"font-size:14px;\">(yani do\u011frulama kural\u0131d\u0131r)<\/span> ve her execution; required, alternative, optional ve conditional olabilmektedir. Bunlar\u0131 yaz\u0131m\u0131z\u0131n sonraki sat\u0131rlar\u0131nda masaya yat\u0131racak olsak da \u015fimdilik buradan anlamam\u0131z gereken, her ad\u0131m\u0131n zorunlulu\u011fu ve davran\u0131\u015f\u0131 \u00f6nceden belirli olmas\u0131d\u0131r.<\/p>\n<h4><span class=\"ez-toc-section\" id=\"Keycloakta_Flow_Turleri_Nelerdir\"><\/span>Keycloak&#8217;ta Flow T\u00fcrleri Nelerdir?<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<table style=\"width:100%;border-collapse:collapse;table-layout:fixed;font-family:Arial,sans-serif;font-size:12px;line-height:1.4;\">\n<tr>\n<th style=\"border:1px solid #ccc;padding:6px;background:#f5f5f5;text-align:center;width:10%\">Flow T\u00fcr\u00fc<\/th>\n<th style=\"border:1px solid #ccc;padding:6px;background:#f5f5f5;text-align:center;width:27%\">A\u00e7\u0131klama<\/th>\n<th style=\"border:1px solid #ccc;padding:6px;background:#f5f5f5;text-align:center;width:27%\">Kullan\u0131ld\u0131\u011f\u0131 Yerler<\/th>\n<th style=\"border:1px solid #ccc;padding:6px;background:#f5f5f5;text-align:center;width:27%\">G\u00fcnl\u00fck Hayattan \u00d6rnekler<\/th>\n<th style=\"border:1px solid #ccc;padding:6px;background:#f5f5f5;text-align:center;width:9%\">Keycloak Kar\u015f\u0131l\u0131\u011f\u0131<\/th>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #ccc;padding:6px;font-weight:bold;\">Browser Flow<\/td>\n<td style=\"border:1px solid #ccc;padding:6px;font-size:10px;text-align:justify;\">\n      Taray\u0131c\u0131 (browser) tabanl\u0131 etkile\u015fimli giri\u015f ak\u0131\u015flar\u0131.\n    <\/td>\n<td style=\"border:1px solid #ccc;padding:6px;font-size:10px;text-align:justify;\">\n      \u25aa\ufe0fWeb uygulamalar\u0131 login ekranlar\u0131<br \/>\n      \u25aa\ufe0fSSO (Single Sign-On) senaryolar\u0131<br \/>\n      \u25aa\ufe0fMFA \/ OTP \/ Captcha gibi etkile\u015fimli ad\u0131mlar<br \/>\n      \u25aa\ufe0fIdentity Provider (Google, Azure AD, e-Devlet) ile login durumlar\u0131\n    <\/td>\n<td style=\"border:1px solid #ccc;padding:6px;font-size:10px;text-align:justify;\">\n      \u25aa\ufe0f\u0130nteraktif Vergi Dairesi&#8217;ne e-Devlet \u00fczerinden login olma.<br \/>\n      \u25aa\ufe0fMHRS&#8217;ye e-Devlet \u00fczerinden giri\u015f yapma.\n    <\/td>\n<td style=\"border:1px solid #ccc;padding:6px;font-size:10px;text-align:center;vertical-align:middle;\">browser<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #ccc;padding:6px;font-weight:bold;\">Direct Grant Flow<\/td>\n<td style=\"border:1px solid #ccc;padding:6px;font-size:10px;text-align:justify;\">\n      Kullan\u0131c\u0131 ad\u0131 ve \u015fifre ile do\u011frudan token alma.<\/p>\n<p>      Sessiz \u00e7al\u0131\u015f\u0131r. Arka planda token \u00fcretir ve taray\u0131c\u0131ya gerek yoktur!<\/p>\n<p>      \u26a0\ufe0fG\u00fcvenlik riski daha y\u00fcksektir! Modern OAuth d\u00fcnyas\u0131nda pek \u00f6nerilmemektedir!\n    <\/td>\n<td style=\"border:1px solid #ccc;padding:6px;font-size:10px;text-align:justify;\">\n      \u25aa\ufe0fRedirect olmadan token al\u0131naca\u011f\u0131 durumlar<br \/>\n      \u25aa\ufe0fAPI, backend ve script tabanl\u0131 login durumlar\u0131<br \/>\n      \u25aa\ufe0fPublic \/ Confidential client&#8217;lar\u0131<br \/>\n      \u25aa\ufe0fMFA ve OTP olmaks\u0131z\u0131n do\u011frulama durumlar\u0131\n    <\/td>\n<td style=\"border:1px solid #ccc;padding:6px;font-size:10px;text-align:justify;\">\n      Mobil uygulamas\u0131n\u0131n kullan\u0131c\u0131 ad\u0131 ve \u015fifreyi do\u011frudan bankan\u0131n sistemine g\u00f6nderip arka planda do\u011frulamas\u0131 ve token almas\u0131.\n    <\/td>\n<td style=\"border:1px solid #ccc;padding:6px;font-size:10px;text-align:center;vertical-align:middle;\">direct grant<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #ccc;padding:6px;font-weight:bold;\">Client Auth Flow<\/td>\n<td style=\"border:1px solid #ccc;padding:6px;font-size:10px;text-align:justify;\">\n      Client&#8217;\u0131n kendisini do\u011frulamas\u0131.<\/p>\n<p>      Kullan\u0131c\u0131 yoktur. Dolay\u0131s\u0131yla do\u011frulanan kullan\u0131c\u0131 de\u011fil uygulaman\u0131n ta kendisidir.\n    <\/td>\n<td style=\"border:1px solid #ccc;padding:6px;font-size:10px;text-align:justify;\">\n      \u25aa\ufe0fClient&#8217;\u0131n kendini do\u011frulamak zorunda oldu\u011fu durumlar<br \/>\n      \u25aa\ufe0fMachine-to-Machine (M2M) senaryolar\u0131<br \/>\n      \u25aa\ufe0fConfidential client&#8217;lar<br \/>\n      \u25aa\ufe0fRefresh token\n    <\/td>\n<td style=\"border:1px solid #ccc;padding:6px;font-size:10px;text-align:justify;\">\n      Bir bankan\u0131n muhasebe sisteminin, \u00e7al\u0131\u015fan olmaks\u0131z\u0131n, kendi kurum kimli\u011fiyle Gelir \u0130daresi sistemine ba\u011flan\u0131p otomatik bildirim g\u00f6ndermesi.\n    <\/td>\n<td style=\"border:1px solid #ccc;padding:6px;font-size:10px;text-align:center;vertical-align:middle;\">clients<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #ccc;padding:6px;font-weight:bold;\">Registration Flow<\/td>\n<td style=\"border:1px solid #ccc;padding:6px;font-size:10px;text-align:justify;\">\n      Kullan\u0131c\u0131 kay\u0131t s\u00fcreci ad\u0131mlar\u0131.<\/p>\n<p>      Yeni kullan\u0131c\u0131 kay\u0131t olurken hangi ad\u0131mlar izlenecek onu belirler.\n    <\/td>\n<td style=\"border:1px solid #ccc;padding:6px;font-size:10px;text-align:justify;\">\n      \u25aa\ufe0fRegistration endpoint<br \/>\n      \u25aa\ufe0fE-posta do\u011frulamas\u0131 gereken kay\u0131t i\u015flemleri<br \/>\n      \u25aa\ufe0fKay\u0131t s\u0131ras\u0131nda ek kontrol veya kural oldu\u011fu durumlar<br \/>\n      \u25aa\ufe0fIdP sonraki ek kay\u0131t gerekti\u011fi durumlar\n    <\/td>\n<td style=\"border:1px solid #ccc;padding:6px;font-size:10px;text-align:justify;\">\n      Bir belediyenin e-hizmet portal\u0131ndan ilk kez hesap olu\u015fturup e-posta do\u011frulamas\u0131 yaparak sisteme kay\u0131t olunmas\u0131.\n    <\/td>\n<td style=\"border:1px solid #ccc;padding:6px;font-size:10px;text-align:center;vertical-align:middle;\">registration<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #ccc;padding:6px;font-weight:bold;\">Reset Credentials Flow<\/td>\n<td style=\"border:1px solid #ccc;padding:6px;font-size:10px;text-align:justify;\">\n      \u015eifre veya kimlik bilgisi s\u0131f\u0131rlama.\n    <\/td>\n<td style=\"border:1px solid #ccc;padding:6px;font-size:10px;text-align:justify;\">\n      Yeni \u015fifre belirleme s\u00fcre\u00e7leri\n    <\/td>\n<td style=\"border:1px solid #ccc;padding:6px;font-size:10px;text-align:justify;\">\n      \u015eifremi unuttum ak\u0131\u015f\u0131.\n    <\/td>\n<td style=\"border:1px solid #ccc;padding:6px;font-size:10px;text-align:center;vertical-align:middle;\">reset credentials<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #ccc;padding:6px;font-weight:bold;\">First Broker Login Flow<\/td>\n<td style=\"border:1px solid #ccc;padding:6px;font-size:10px;text-align:justify;\">\n      Harici IdP sonras\u0131 ilk giri\u015f s\u00fcreci.<\/p>\n<p>      Google, Azure AD, e-Devlet vs. gibi harici bir Identity Provider&#8217;dan ilk kez gelen kullan\u0131c\u0131 i\u00e7in \u00e7al\u0131\u015f\u0131r.<\/p>\n<p>      \ud83d\udcccFederation \/ Broker senaryolar\u0131n\u0131n kalbidir.\n    <\/td>\n<td style=\"border:1px solid #ccc;padding:6px;font-size:10px;text-align:justify;\">\n      \u25aa\ufe0fHarici Identity Provider&#8217;dan d\u00f6n\u00fc\u015f yap\u0131ld\u0131\u011f\u0131 durumlar<br \/>\n      \u25aa\ufe0fIdP&#8217;den gelen bilgiler yeterli olmad\u0131\u011f\u0131 durumlar<br \/>\n      \u25aa\ufe0fIdP login sonras\u0131 politika uygulanaca\u011f\u0131 durumlar\n    <\/td>\n<td style=\"border:1px solid #ccc;padding:6px;font-size:10px;text-align:justify;\">\n      \u25aa\ufe0fBir vatanda\u015f\u0131n bir belediyenin e-hizmet portal\u0131na ilk kez e-Devlet ile giri\u015f yapmas\u0131 ve sistemin bu ki\u015fiyi o anda kendi kay\u0131tlar\u0131na eklemesi.<br \/>\n      \u25aa\ufe0fBir \u00f6\u011frencinin \u00fcniversite sistemine ilk kez e-Devlet\/Y\u00d6K do\u011frulamas\u0131yla girip otomatik \u00f6\u011frenci hesab\u0131n\u0131 a\u00e7mas\u0131.\n    <\/td>\n<td style=\"border:1px solid #ccc;padding:6px;font-size:10px;text-align:center;vertical-align:middle;\">first broker login<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #ccc;padding:6px;font-weight:bold;\">Conditional Flow\u2019lar<\/td>\n<td style=\"border:1px solid #ccc;padding:6px;font-size:10px;text-align:justify;\">\n      Ko\u015fula ba\u011fl\u0131 authentication ak\u0131\u015flar\u0131.<\/p>\n<p>      E\u011fer \u015fu \u015fart sa\u011flan\u0131yorsa, \u015fu ad\u0131m\u0131 \u00e7al\u0131\u015ft\u0131r mant\u0131\u011f\u0131nda ak\u0131\u015f sa\u011flar.\n    <\/td>\n<td style=\"border:1px solid #ccc;padding:6px;font-size:10px;text-align:justify;\">\n      \u25aa\ufe0fAuthentication Flow i\u00e7inde ko\u015ful de\u011ferlendirmesi gereken her yer<br \/>\n      \u25aa\ufe0fKullan\u0131c\u0131ya g\u00f6re farkl\u0131 ad\u0131mlar \u00e7al\u0131\u015ft\u0131r\u0131laca\u011f\u0131 durumlar<br \/>\n      \u25aa\ufe0fOrtama \/ ba\u011flama g\u00f6re karar verilen senaryolar\u0131<br \/>\n      \u25aa\ufe0fRisk bazl\u0131 do\u011frulama senaryolar\u0131nda<br \/>\n      \u25aa\ufe0fAyn\u0131 flow i\u00e7inde farkl\u0131 login yollar\u0131 sunulacaksa\n    <\/td>\n<td style=\"border:1px solid #ccc;padding:6px;font-size:10px;text-align:justify;\">\n      Role veya IP\u2019ye g\u00f6re ek do\u011frulama.\n    <\/td>\n<td style=\"border:1px solid #ccc;padding:6px;font-size:10px;text-align:center;vertical-align:middle;\"><\/td>\n<\/tr>\n<\/table>\n<h4><span class=\"ez-toc-section\" id=\"Execution_Nedir\"><\/span>Execution Nedir?<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Authentication Flow, i\u00e7erisinde ad\u0131mlardan olu\u015fan bir ak\u0131\u015ftan ibarettir ve her bir ad\u0131m \u00f6nceden; \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmayaca\u011f\u0131, ba\u015far\u0131s\u0131z olursa ne olaca\u011f\u0131, alternatif olup olmad\u0131\u011f\u0131 vs. gibi durumlara kar\u015f\u0131n hali haz\u0131rda tan\u0131mlanm\u0131\u015f davran\u0131\u015fa sahiptir. \u0130\u015fte bizler bu do\u011frulama kurallar\u0131n\u0131n oldu\u011fu ad\u0131mlar\u0131n her birine Execution diyoruz.<\/p>\n<blockquote><p><em>Execution, authentication s\u0131ras\u0131nda \u00e7al\u0131\u015fan tek bir do\u011frulama kural\u0131d\u0131r. Flow ise execution&#8217;lar\u0131n s\u0131ral\u0131 \u00e7al\u0131\u015ft\u0131\u011f\u0131 bir yap\u0131d\u0131r.<\/em><\/p><\/blockquote>\n<h5><span class=\"ez-toc-section\" id=\"Execution_Typelar\"><\/span>Execution Type&#8217;lar<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Execution&#8217;lar sergiledikleri davran\u0131\u015flar\u0131n t\u00fcr\u00fcne g\u00f6re required, alternative, optional ve conditional olmak \u00fczere d\u00f6rde ayr\u0131lmaktad\u0131rlar. \u015eimdi gelin bu execution tiplerini tek tek masaya yat\u0131ral\u0131m;<\/p>\n<ul style=\"font-size:14px;\">\n<li><strong><em>REQUIRED<\/em><\/strong><br \/>\nRequired olarak tan\u0131mlanm\u0131\u015f olan ad\u0131m, ad\u0131 \u00fczerinde, mutlaka \u00e7al\u0131\u015fmal\u0131 ve ba\u015far\u0131l\u0131 olmal\u0131. Genellikle username ve password do\u011frulama s\u00fcre\u00e7lerinde veyahut zorunlu OTP kullan\u0131lan senaryolarda tercih edilir.\n<\/li>\n<li><strong><em>ALTERNATIVE<\/em><\/strong><br \/>\nAyn\u0131 seviyede birden fazla execution&#8217;\u0131n oldu\u011fu senaryoyu ifade etmektedir. Aralar\u0131nda &#8216;veya&#8217; mant\u0131\u011f\u0131 s\u00f6z konusudur. Ad\u0131 \u00fczerinde \ud83d\ude42 alternatif&#8230; Haliyle bir tanesinin ba\u015far\u0131l\u0131 olmas\u0131 flow&#8217;un devam etmesi i\u00e7in yeterlidir.\n<\/li>\n<li><strong><em>OPTIONAL<\/em><\/strong><br \/>\nBu execution ba\u015far\u0131l\u0131 olsa da olmasa da \u00e7al\u0131\u015facak ancak flow&#8217;u engellemeyecektir. Yani opsiyoneldir. Buna en g\u00fczel \u00f6rne\u011fi &#8216;Remember-me&#8217;yi verebiliriz \ud83d\ude09 Olsa da ak\u0131\u015f devam edecek, olmasa da&#8230;\n<\/li>\n<li><strong><em>CONDITIONAL<\/em><\/strong><br \/>\nBu execution ise \u015farta g\u00f6re i\u015flevsellik g\u00f6sterecektir. Yani bir do\u011frulamadan ziyade, karar mekanizmas\u0131 gibi davran\u0131\u015f sergilemektedir. Misal olarak; kullan\u0131c\u0131n\u0131n OTP&#8217;si aktif mi?, client public mi? IP trusted m\u0131? vs. gibi \u015fartlar \u00f6rnek g\u00f6sterilebilir.\n<\/li>\n<\/ul>\n<p>\u015eimdi bu execution&#8217;lar\u0131 ak\u0131llarda daha da netle\u015ftirebilmek i\u00e7in Keycloak \u00e7er\u00e7evesinde <em>Browser Authentication Flow<\/em>&#8216;u ad\u0131m ad\u0131m (execution execution) teoride par\u00e7alayal\u0131m ve b\u00f6ylece s\u00fcre\u00e7te yap\u0131y\u0131 g\u00f6zlemlemeye \u00e7al\u0131\u015fal\u0131m.<\/p>\n<h5><span class=\"ez-toc-section\" id=\"Browser_Authentication_Flowu_Executionlarina_Bolelim\"><\/span>Browser Authentication Flow&#8217;u Execution&#8217;lar\u0131na B\u00f6lelim<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Browser flow, yukar\u0131daki sat\u0131rlarda inceledi\u011fimiz \u00fczere taray\u0131c\u0131dan gelen login&#8217;ler i\u00e7in \u00e7al\u0131\u015fan bir ak\u0131\u015ft\u0131r. \u015eimdi bu flow&#8217;un \u00fcst seviye \u015femas\u0131n\u0131 \u00e7\u0131kar\u0131rsak e\u011fer;<\/p>\n<div style=\"background:#0d0d0d;color:#e6e6e6;font-family:Consolas,'Courier New',monospace;font-size:16px;white-space:pre;line-height:0.8;padding:12px;width:300px;\">\nBrowser Flow<br \/>\n\u251c\u2500 Cookie<br \/>\n\u251c\u2500 Kerberos (opsiyonel)<br \/>\n\u2514\u2500 Username Password Form<br \/>\n   \u251c\u2500 Username Password<br \/>\n   \u2514\u2500 Conditional OTP<br \/>\n      \u2514\u2500 OTP Form\n<\/div>\n<p>G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere Browser flow, yukar\u0131daki execution&#8217;lar ile seyretmektedir. \u015eimdi gelin tek tek, hangi execution ne yap\u0131yor, neden var, ba\u015far\u0131s\u0131z olursa ne olur incelemeye ba\u015flayal\u0131m&#8230;<\/p>\n<ul style=\"font-size:14px;\">\n<li><strong><em>1\ufe0f\u20e3Cookie<\/em><\/strong><br \/>\n<span style=\"font-size:10px;\">Type : ALTERNATIVE<\/span><\/p>\n<p><em><u>Ne yapar?<\/u><\/em><\/p>\n<ul>\n<li>Taray\u0131c\u0131da \u00f6nceden ge\u00e7erli bir Keycloak oturumu (SSO cookie) var m\u0131 kontrol eder.<\/li>\n<li>Varsa hi\u00e7 kullan\u0131c\u0131 \u015fifre sormadan login ba\u015far\u0131l\u0131 say\u0131l\u0131r.<\/li>\n<\/ul>\n<p><em><u>Neden ALTERNATIVE&#8217;dir?<\/u><\/em><br \/>\n\u00c7\u00fcnk\u00fc cookie varsa e\u011fer i\u015f bitmekte, yoksa di\u011fer alternatiflere ge\u00e7ilmektedir.<\/p>\n<p>Bu ad\u0131m ba\u015far\u0131s\u0131z olsa bile login bitmeyecektir!\n<\/li>\n<li><strong><em>2\ufe0f\u20e3 Kerberos (SPNEGO)<\/em><\/strong><br \/>\n<span style=\"font-size:10px;\">Type : ALTERNATIVE<\/span><\/p>\n<p><em><u>Ne yapar?<\/u><\/em><br \/>\nKurumsal ortamda (AD \/ Kerberos) taray\u0131c\u0131 domain&#8217;e login mi diye bakar.<\/p>\n<p>\u00c7o\u011fu sistemde disable edilmektedir.\n<\/li>\n<li><strong><em>3\ufe0f\u20e3 Username Password Form<\/em><\/strong><br \/>\n\u0130\u015fin klasik login k\u0131sm\u0131 burada ba\u015flamaktad\u0131r! Esas\u0131nda bu bir execution de\u011fildir! SUB-FLOW&#8217;dur! Yani alt\u0131nda a\u015fa\u011f\u0131daki execution&#8217;lar mevcuttur;<\/p>\n<div style=\"background:#0d0d0d;color:#e6e6e6;font-family:Consolas,'Courier New',monospace;font-size:16px;white-space:pre;line-height:0.8;padding:12px;width:300px;\">\nUsername Password Form<br \/>\n \u251c\u2500 Username Password<br \/>\n \u2514\u2500 Conditional OTP<br \/>\n   \u2514\u2500 OTP Form\n<\/div>\n<ul>\n<li><strong><em>3\ufe0f\u20e3.1\ufe0f\u20e3 Username Password<\/em><\/strong><br \/>\n<span style=\"font-size:10px;\">Type : REQUIRED<\/span><\/p>\n<p><em><u>Ne yapar?<\/u><\/em><\/p>\n<ul style=\"font-size:14px;\">\n<li>Kullan\u0131c\u0131 var m\u0131?<\/li>\n<li>\u015eifre do\u011fru mu?<\/li>\n<li>Hesap kilitli mi?<\/li>\n<li>Credential ge\u00e7erli mi?<\/li>\n<\/ul>\n<p>kontrol eder.\n<\/li>\n<li><strong><em>3\ufe0f\u20e3.2\ufe0f\u20e3 Conditional OTP<\/em><\/strong><br \/>\n<span style=\"font-size:10px;\">Type : CONDITIONAL<\/span><\/p>\n<p>Bu ad\u0131m do\u011frudan do\u011frulama yapmamakta sadece karar vermektedir.<\/p>\n<p>\u015eart \u015fudur: Kullan\u0131c\u0131n\u0131n OTP&#8217;si aktif mi? E\u011fer bu \u015fart false ise kullan\u0131c\u0131n\u0131n OTP&#8217;si pasif oldu\u011fu anla\u015f\u0131lacak ve dolay\u0131s\u0131yla herhangi bir alt ad\u0131m devreye girmeyecektir. Yok e\u011fer \u015fart true ise i\u015fte o taktirde OTP Form execution&#8217;\u0131 devreye girecektir.<\/p>\n<ul>\n<li><strong><em>3\ufe0f\u20e3.2\ufe0f\u20e3.1\ufe0f\u20e3 OTP Form<\/em><\/strong><br \/>\n<span style=\"font-size:10px;\">Type : REQUIRED<\/span><\/p>\n<p><em><u>Ne yapar?<\/u><\/em><\/p>\n<ul style=\"font-size:14px;\">\n<li>Kullan\u0131c\u0131dan OTP ister.<\/li>\n<li>Yanl\u0131\u015fsa login biter!<\/li>\n<li>Do\u011fruysa devam eder.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><strong>Peki bu flow ne zaman authentication&#8217;\u0131 bitirecek?<\/strong><br \/>\nAsl\u0131nda a\u015fikar&#8230; Ak\u0131\u015fta; Cookie veya Kerberos veya Username Password (+ gerekirse OTP) ba\u015far\u0131l\u0131 oldu\u011fu taktirde authentication ba\u015far\u0131l\u0131 kabul edilecek, token \u00fcretilecek ve session olu\u015fturulacakt\u0131r.<\/p>\n<p>T\u00fcm ak\u0131\u015f\u0131 tek par\u00e7a halinde seyredebilmek i\u00e7in buyurun;<\/p>\n<div style=\"background:#0d0d0d;color:#e6e6e6;font-family:Consolas,'Courier New',monospace;font-size:16px;white-space:pre;line-height:0.8;padding:12px;width:400px;\">\nBrowser Flow<br \/>\n \u251c\u2500 Cookie (ALTERNATIVE)<br \/>\n \u2502    \u2514\u2500 SUCCESS \u2192 LOGIN OK<br \/>\n \u2502<br \/>\n \u251c\u2500 Kerberos (ALTERNATIVE)<br \/>\n \u2502    \u2514\u2500 SUCCESS \u2192 LOGIN OK<br \/>\n \u2502<br \/>\n \u2514\u2500 Username Password Form (ALTERNATIVE)<br \/>\n      \u251c\u2500 Username Password (REQUIRED)<br \/>\n      \u2502    \u2514\u2500 FAIL \u2192 LOGIN FAIL<br \/>\n      \u2502<br \/>\n      \u2514\u2500 Conditional OTP<br \/>\n           \u251c\u2500 OTP aktif mi?<br \/>\n           \u2502<br \/>\n           \u251c\u2500 NO \u2192 DEVAM<br \/>\n           \u2514\u2500 YES<br \/>\n                \u2514\u2500 OTP Form (REQUIRED)<br \/>\n                     \u2514\u2500 FAIL \u2192 LOGIN FAIL\n<\/div>\n<p>Evet&#8230; Bu \u00f6rnek sayesinde execution&#8217;lar\u0131n daha anla\u015f\u0131l\u0131r oldu\u011funu d\u00fc\u015f\u00fcn\u00fcyorum.<\/p>\n<p>Nihai olarak;<\/p>\n<p>Bu i\u00e7eri\u011fimizde, Keycloak&#8217;daki Authentication Flow yap\u0131s\u0131n\u0131 teorik olarak tam teferruatl\u0131 incelemi\u015f bulunuyoruz. Bundan sonraki i\u00e7eriklerimizde bu makalede de\u011ferlendirdi\u011fimiz her bir ak\u0131\u015fa ayr\u0131 ayr\u0131 odaklanacak ve Asp.NET Core \u00fczerinden m\u00fcmk\u00fcn mertebe pratiksel olarak \u00f6rneklendirmeye \u00e7al\u0131\u015f\u0131yor olaca\u011f\u0131z. O halde heyecanla sonraki yaz\u0131larda g\u00f6r\u00fc\u015fmek \u00fczere diyelim ve i\u00e7eri\u011fimizi burada nihayetlendirelim&#8230;<\/p>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Modern kimlik ve eri\u015fim y\u00f6netimi (IAM) \u00e7\u00f6z\u00fcmlerinde kullan\u0131c\u0131y\u0131 do\u011frulamak art\u0131k tek ba\u015f\u0131na yeterli de\u011fildir. Do\u011frulaman\u0131n hangi ba\u011flamda, hangi ad\u0131mlarla ve hangi ko\u015fullara ba\u011fl\u0131 olarak ger\u00e7ekle\u015fti\u011fi en az sonucun kendisi kadar kritik arz etmektedir.&#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":28235,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5206,5554],"tags":[100,2759,5614,5620,5625,5615,5627,5617,5631,5616,1454,5624,5630,5626,5621,5622,5623,5555,5628,5629,5618,5619],"class_list":["post-28363","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-net","category-keycloak","tag-identity","tag-authentication","tag-authentication-flow","tag-authentication-nedir","tag-broker","tag-browser-flow","tag-client-auth-flow","tag-conditional-flow","tag-conditional-flowlar","tag-direct-grant-flow","tag-execution","tag-federation","tag-first-broker-login","tag-identity-brokering","tag-identity-nedir","tag-identity-provider","tag-idp","tag-keycloak","tag-registration-flow","tag-reset-credentials","tag-service-provider-interface","tag-spi"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/28363","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=28363"}],"version-history":[{"count":17,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/28363\/revisions"}],"predecessor-version":[{"id":28384,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/28363\/revisions\/28384"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/28235"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=28363"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=28363"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=28363"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}