﻿
{"id":18599,"date":"2020-10-30T15:13:49","date_gmt":"2020-10-30T15:13:49","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=18599"},"modified":"2020-10-30T16:19:38","modified_gmt":"2020-10-30T16:19:38","slug":"identityserver4-yazi-serisi-8-authorization-code-grantflow","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/identityserver4-yazi-serisi-8-authorization-code-grantflow\/","title":{"rendered":"IdentityServer4 Yaz\u0131 Serisi #8 &#8211; Authorization Code Grant(Flow)"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Daha \u00f6nce <a href=\"https:\/\/www.gencayyildiz.com\/blog\/identityserver4-yazi-serisi\/\" rel=\"noopener noreferrer\" target=\"_blank\">IdentityServer4 Yaz\u0131 Serisi<\/a>nin \u00fc\u00e7\u00fcnc\u00fc makalesi olan <a href=\"https:\/\/www.gencayyildiz.com\/blog\/identityserver4-yazi-serisi-3-client-credentials\/\" rel=\"noopener noreferrer\" target=\"_blank\">Client Credentials<\/a> ba\u015fl\u0131kl\u0131 makalemizde IdentityServer4 yap\u0131lanmas\u0131 \u00fczerinden client&#8217;lar\u0131n yetkilendirilmesini teorik ve pratik olarak incelemi\u015ftik. Bu sekizinci makalede ise <em>Authorization Code Grant\/Flow<\/em> ile kullan\u0131c\u0131lar\u0131n onay\u0131 \u00fczerinden yetkilendirmenin nas\u0131l yap\u0131ld\u0131\u011f\u0131n\u0131 sadece teorik bir \u015fekilde isti\u015fare edece\u011fiz.<\/p>\n<h3 style=\"color:#e83e8c;\">Authorization Code Grant Nedir?<\/h3>\n<p>Authorization Code, ad\u0131 \u00fczerinde &#8216;yetki kodu&#8217;dur. Yani istemcinin bir access token&#8217;\u0131 alabilmesi i\u00e7in \u00f6nceden gerekli olan &#8216;yetki&#8217;yi temsil eden koddur. Authorization code; kullan\u0131c\u0131 taraf\u0131ndan kullan\u0131lan client&#8217;\u0131n, kullan\u0131c\u0131n\u0131n Auth Server \u00fczerinden sisteme authorize olmas\u0131 esnas\u0131nda, client taraf\u0131ndan \u00f6\u011frenilmek ve elde edilmek istenen bilgilerin kullan\u0131c\u0131 taraf\u0131ndan onaylanmas\u0131 neticesinde bu bilgileri bar\u0131nd\u0131racak \u015fekilde auth server taraf\u0131ndan \u00fcretilmi\u015f bir koddur. E\u011fer Auth Server, client&#8217;a bu authorization code&#8217;u veriyorsa, client&#8217;da bu kod e\u015fli\u011finde tekrar auth server&#8217;dan access token&#8217;\u0131(ve varsa refresh token&#8217;\u0131 da) elde edebilecektir.<\/p>\n<blockquote><p><em style=\"color:orange;\">Authorization code; Auth server a\u00e7\u0131s\u0131ndan access token \u00fcretmek i\u00e7in kullan\u0131c\u0131 bilgilerinin do\u011frulu\u011funun yan\u0131nda ayr\u0131 bir onay\/yetki manas\u0131na gelmektedir. E\u011fer authorization code yanl\u0131\u015fsa, kullan\u0131c\u0131 bilgileri do\u011fru olsa bile access token \u00fcretilmeyecektir.<\/em><\/p><\/blockquote>\n<h3 style=\"color:#e83e8c;\">Authorization Code Ak\u0131\u015f S\u00fcreci Nas\u0131ld\u0131r?<\/h3>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/10\/IdentityServer4-Yazi-Serisi-8-Authorization-Code-GrantFlow.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/10\/IdentityServer4-Yazi-Serisi-8-Authorization-Code-GrantFlow.png\" alt=\"IdentityServer4 Yaz\u0131 Serisi #8 - Authorization Code Grant(Flow)\" width=\"442\" height=\"322\" class=\"alignleft size-full wp-image-18601\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/10\/IdentityServer4-Yazi-Serisi-8-Authorization-Code-GrantFlow.png 442w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/10\/IdentityServer4-Yazi-Serisi-8-Authorization-Code-GrantFlow-300x219.png 300w\" sizes=\"auto, (max-width: 442px) 100vw, 442px\" \/><\/a>Yandaki g\u00f6rsel authorization code&#8217;un ak\u0131\u015f s\u00fcrecini en iyi temsil eden bir diyagrama sahiptir. \u0130lk olarak burada rol alan oyunculardan bahsederek ba\u015flayal\u0131m;<\/p>\n<ul>\n<li><strong><em>Resource owner<\/em><\/strong><br \/>\nUygulamay\u0131 kullanan kullan\u0131c\u0131. Kaynak sahibi.\n<\/li>\n<li><strong><em>User agent<\/em><\/strong><br \/>\nKullan\u0131c\u0131ya arac\u0131l\u0131k eden uygulama. Genellikle web taray\u0131c\u0131s\u0131d\u0131r.\n<\/li>\n<li><strong><em>Authorization Server<\/em><\/strong><br \/>\nToken da\u011f\u0131tan sunucumuz.\n<\/li>\n<li><strong><em>Client<\/em><\/strong><br \/>\nClient&#8217;\u0131n ta kendisi. Single Page Application(SPA), Mobile, Web vs. olabilir.\n<\/li>\n<\/ul>\n<p>\u015eimdide s\u00fcre\u00e7teki ad\u0131mlar\u0131 ele alal\u0131m;<\/p>\n<ul>\n<li><strong><em style=\"color:purple;\">A<\/em><\/strong><br \/>\nClient(genellikle bir web uygulamas\u0131), user agent(genellikle bir web taray\u0131c\u0131s\u0131) arac\u0131l\u0131\u011f\u0131yla kullan\u0131c\u0131y\u0131 Authorization server&#8217;a y\u00f6nlendirerek s\u00fcreci ba\u015flat\u0131r. Client, kullan\u0131c\u0131y\u0131 authorization server&#8217;a y\u00f6nlendirirken, bu y\u00f6nlendirme i\u00e7erisinde m\u00fc\u015fteri kimli\u011fi(client identifier\/username&#038;password) ve yeniden y\u00f6nlendirme uri(redirect uri) bilgisini bar\u0131nd\u0131r\u0131r. Auth server, gerekli do\u011frulama i\u015flemi neticesinde(ki ge\u00e7ersiz do\u011frulama olsa dahi) client&#8217;\u0131 bilgilendirmek i\u00e7in redirect uri&#8217;ye geri y\u00f6nlendirme yapar.\n<\/li>\n<li><strong><em style=\"color:purple;\">B<\/em><\/strong><br \/>\nResource owner(kullan\u0131c\u0131), user agent arac\u0131l\u0131\u011f\u0131yla authorization server&#8217;da kimlik do\u011frulamas\u0131n\u0131 ger\u00e7ekle\u015ftirir ve client&#8217;\u0131n belli ba\u015fl\u0131 bilgilerine olan eri\u015fim talebini onaylar veya reddeder.\n<\/li>\n<li><strong><em style=\"color:purple;\">C<\/em><\/strong><br \/>\nResource owner eri\u015fim izni verirse, auth server taraf\u0131nda bir &#8216;Authorization Code\/Yetkilendirme Kodu&#8217; \u00fcretilir. Ard\u0131ndan bu kodla birlikte auth server, user agent&#8217;\u0131 redirect uri&#8217;de belirtilen adrese y\u00f6nlendirir.\n<\/li>\n<li><strong><em style=\"color:purple;\">D<\/em><\/strong><br \/>\nArt\u0131k client &#8216;Authorization Code&#8217;a sahiptir ve bu kodu kullanarak auth server&#8217;\u0131n token endpoint&#8217;ine access token i\u00e7in talepte bulunur. Tabi bu talepte bulunurken, auth server&#8217;\u0131n kimlik do\u011frulama(authentication) yapabilmesi i\u00e7in istemci kimlik bilgileri(client credential) ve access token&#8217;\u0131 elde edebilmesi i\u00e7inde yeniden y\u00f6nlendirme uri&#8217;si ilgili talebe eklenir.\n<\/li>\n<li><strong><em style=\"color:purple;\">E<\/em><\/strong><br \/>\nAuth server, token endpoint&#8217;ine client&#8217;tan gelen bu talep neticesinde ta\u015f\u0131nan &#8216;Authorization Code&#8217;u ve client credential bilgilerini do\u011frular ve access token&#8217;\u0131 \u00fcretir. Ard\u0131ndan belirtilen redirect uri&#8217;ye ilgili access token bilgisini g\u00f6nderir. B\u00f6ylece client access token&#8217;\u0131 elde ederek yetkilendirilmi\u015f olur.\n<\/li>\n<\/ul>\n<p>\u0130\u015fte t\u00fcm s\u00fcre\u00e7 bu \u015fekilde cereyan etmektedir. Nihai olarak access token&#8217;\u0131 elde eden client bu token arac\u0131l\u0131\u011f\u0131yla API&#8217;lara isteklerde bulunabilir.<\/p>\n<blockquote><p><em style=\"color:orange;\">Authorization Code Grant client&#8217;\u0131 yetkilendirmek i\u00e7in, \u00f6nce authorization code&#8217;u ar\u0131ndan da access token&#8217;\u0131 zorunlu k\u0131ld\u0131\u011f\u0131ndan dolay\u0131 <strong><u>iki a\u015famal\u0131 do\u011frulama ger\u00e7ekle\u015ftirmektedir<\/u><\/strong> diyebiliriz.<\/em><\/p><\/blockquote>\n<h3 style=\"color:#e83e8c;\">IdentityServer4 Framework&#8217;\u00fc \u0130le Authorization Code&#8217;u Nas\u0131l Uygular\u0131z?<\/h3>\n<blockquote><p><em style=\"color:purple;\">IdentityServer4 framework&#8217;\u00fc Authorization Code stratejisini herhangi bir manuel kod in\u015fa etmeye gerek kalmaks\u0131z\u0131n otomatik ger\u00e7ekle\u015ftirmektedir.<\/em><\/p><\/blockquote>\n<blockquote><p><em style=\"color:green;\">Auth Server&#8217;dan taray\u0131c\u0131 arac\u0131l\u0131\u011f\u0131yla authentication code isteyebilmek i\u00e7in <a href=\"https:\/\/identityserver4.readthedocs.io\/en\/latest\/endpoints\/authorize.html\" rel=\"noopener noreferrer\" target=\"_blank\">Authorize Endpoint<\/a> kullan\u0131l\u0131r.<\/em><\/p><\/blockquote>\n<p>Serimizin ileriki makalelerinde Authorization Code Grant ak\u0131\u015f\u0131n\u0131n pratiksel \u00e7al\u0131\u015fmas\u0131n\u0131n nas\u0131l yap\u0131ld\u0131\u011f\u0131n\u0131 konu\u015fuyor olaca\u011f\u0131m\u0131zdan dolay\u0131 i\u00e7eri\u011fi burada noktal\u0131yorum&#8230;<\/p>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\nSonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Daha \u00f6nce IdentityServer4 Yaz\u0131 Serisinin \u00fc\u00e7\u00fcnc\u00fc makalesi olan Client Credentials ba\u015fl\u0131kl\u0131 makalemizde IdentityServer4 yap\u0131lanmas\u0131 \u00fczerinden client&#8217;lar\u0131n yetkilendirilmesini teorik ve pratik olarak incelemi\u015ftik. Bu sekizinci makalede ise Authorization Code Grant\/Flow ile kullan\u0131c\u0131lar\u0131n onay\u0131 \u00fczerinden&#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":18168,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3826],"tags":[3874,3872,3871,3882,3827,3873,3876,3877,3875],"class_list":["post-18599","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-identityserver4","tag-authorization-code","tag-authorization-code-flow","tag-authorization-code-grant","tag-authorize-endpoint","tag-identityserver4","tag-identityserver4-authorization-code-grant","tag-identityserver4-quickstart-ui","tag-microsoft-aspnetcore-authentication-openidconnect","tag-yetkilendirme-kodu"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/18599","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=18599"}],"version-history":[{"count":120,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/18599\/revisions"}],"predecessor-version":[{"id":18745,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/18599\/revisions\/18745"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/18168"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=18599"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=18599"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=18599"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}