﻿
{"id":12439,"date":"2019-11-08T23:00:49","date_gmt":"2019-11-08T23:00:49","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=12439"},"modified":"2019-11-08T23:13:56","modified_gmt":"2019-11-08T23:13:56","slug":"asp-net-core-identity-politika-bazli-kimlik-dogrulama-xvi","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/asp-net-core-identity-politika-bazli-kimlik-dogrulama-xvi\/","title":{"rendered":"Asp.NET Core Identity \u2013 Politika Bazl\u0131 Kimlik Do\u011frulama \u2013 XVI"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/asp-net-core-identity-yazi-dizisi\/\" target=\"_blank\" rel=\"noopener noreferrer\">Asp.NET Core Identity yaz\u0131 dizimizin<\/a> 16. yaz\u0131s\u0131nda Politika Bazl\u0131 Kimlik Do\u011frulama(Policy Based Authorization) stratejisinin nas\u0131l i\u015flendi\u011fine dair kalem oynataca\u011f\u0131z. Ayriyetten ilgili i\u00e7eri\u011fi yaz\u0131 dizimizin olu\u015fturulma s\u00fcrecinde release edilen Asp.NET Core 3.0 versiyonu alt yap\u0131s\u0131nda geli\u015ftirece\u011fimiz bir projede \u00f6rneklendirece\u011fiz.<\/p>\n<h3>Politika Bazl\u0131 Kimlik Do\u011frulama(Policy Based Authorization) Nedir?<\/h3>\n<p>Policy Based Authorization, <a href=\"https:\/\/www.gencayyildiz.com\/blog\/asp-net-core-identity-sayfalari-yetkilendirme-authorization-xv\/\" target=\"_blank\" rel=\"noopener noreferrer\">yetkilendirilmi\u015f<\/a> sayfalarda belirlenmi\u015f <a href=\"https:\/\/www.gencayyildiz.com\/blog\/asp-net-core-identity-rolemanager-sinifi-ile-rol-yonetimi-xiv\/\" target=\"_blank\" rel=\"noopener noreferrer\">rol<\/a>lerin d\u0131\u015f\u0131nda, t\u00fcrl\u00fc politikalar belirlememizi sa\u011flayan ve kimlik do\u011frulama s\u00fcrecinde bu politikalar\u0131da de\u011ferlendiren bir stratejinin i\u015fleyi\u015f ad\u0131d\u0131r.<\/p>\n<h3>Nas\u0131l Politika Tan\u0131mlan\u0131r?<\/h3>\n<p>Bir politika belirleyebilmek i\u00e7in IAuthorizationRequirement ve IAuthorizationHandler interfacelerinden t\u00fcremesi kayd\u0131yla iki adet s\u0131n\u0131f\u0131n olu\u015fturulmas\u0131 gerekmektedir.<br \/>\n\u0130lgili interfaceleri a\u015fa\u011f\u0131da de\u011ferlendirirsek e\u011fer;<\/p>\n<ul>\n<li><strong><em>IAuthorizationRequirement<\/em><\/strong><br \/>\n\u0130\u00e7erisinde herhangi bir member bar\u0131nd\u0131rmayan bu interface politika temelli yetkilendirmenin neticede ba\u015far\u0131l\u0131 olup olmad\u0131\u011f\u0131n\u0131 izlemeye y\u00f6nelik bir sorumluluk \u00fcstlenecektir.<\/li>\n<li><strong><em>IAuthorizationHandler<\/em><\/strong><br \/>\nBelirlenen politika do\u011frultusunda \u015fartlar\u0131n kar\u015f\u0131lan\u0131p kar\u015f\u0131lanmad\u0131\u011f\u0131n\u0131 kontrol etmekten sorumlu aray\u00fcz\u00fcm\u00fczd\u00fcr. Kendisinden t\u00fcreyen &#8220;AuthorizationHandler&#8221; abstract s\u0131n\u0131f\u0131 \u00fczerinden somut handle s\u0131n\u0131f\u0131n\u0131 \u00fcretir.<\/li>\n<\/ul>\n<p>\u015eimdi uygulamada a\u015fa\u011f\u0131daki senaryoya uygun bir politika geli\u015ftirelim.<\/p>\n<blockquote><p><strong><em style=\"color: orange;\">Bulunulan saatin dakikas\u0131 40 ile 50 aras\u0131nda ise ilgili sayfaya eri\u015fim engellensin.<\/em><\/strong><\/p><\/blockquote>\n<p>Bunun i\u00e7in \u00f6ncelikle &#8220;IAuthorizationRequirement&#8221; t\u00fcrevi &#8220;TimeRequirement&#8221; ismini verdi\u011fim s\u0131n\u0131f\u0131m\u0131z\u0131 olu\u015ftural\u0131m;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class TimeRequirement : IAuthorizationRequirement\r\n    {\r\n    }\r\n<\/pre>\n<p>Ard\u0131ndan &#8220;IAuthorizationHandler&#8221; t\u00fcrevi olan &#8220;TimeHandler&#8221; s\u0131n\u0131f\u0131n\u0131 geli\u015ftirelim;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class TimeHandler : AuthorizationHandler&lt;TimeRequirement&gt;\r\n    {\r\n        protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, TimeRequirement requirement)\r\n        {\r\n            if (DateTime.Now.Minute &gt;= 40 &amp;&amp; DateTime.Now.Minute &lt; 50)\r\n                context.Succeed(requirement);\r\n            else\r\n                context.Fail();\r\n            return Task.CompletedTask;\r\n        }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131daki handler s\u0131n\u0131f\u0131nda olu\u015fturulan gereksinim, politikan\u0131n \u015fartlar\u0131n\u0131 ifade etmektedir. Dikkat ederseniz e\u011fer o anki zaman\u0131n dakika bilgisi 40 ile 50 aras\u0131ndaysa &#8220;Succeed&#8221; yok e\u011fer de\u011filse &#8220;Fail&#8221; fonksiyonlar\u0131 tetiklenmekte ve kullan\u0131c\u0131 duruma g\u00f6re y\u00f6nlendirilmektedir. Nihayetinde olu\u015fturulan bu politikay\u0131 de\u011ferlendirebilmek i\u00e7in s\u0131ra uygulamaya eklemeye ve kullanmaya geldi.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class Startup\r\n    {\r\n        public void ConfigureServices(IServiceCollection services)\r\n        {\r\n            .\r\n            .\r\n            .\r\n            services.AddAuthorization(x =&gt;\r\n            {\r\n                x.AddPolicy(&quot;TimeControl&quot;, policy =&gt; policy.Requirements.Add(new TimeRequirement()));\r\n            });\r\n            services.AddSingleton&lt;IAuthorizationHandler, TimeHandler&gt;();\r\n\r\n            services.AddControllersWithViews();\r\n        }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131daki kod blo\u011funu incelerseniz e\u011fer politikam\u0131z\u0131 olu\u015fturabilmek i\u00e7in <em>Startup<\/em> dosyas\u0131nda <em>ConfigureServices<\/em> metodunu kullanmam\u0131z gerekmektedir. \u0130lgili metot i\u00e7erisinde <em>AddAuthorization<\/em> metodu ile olu\u015fturulan lambda ifadesi i\u00e7erisinde <em>AddPolicy<\/em> fonksiyonu kullan\u0131larak uygulamaya yeni politikalar olu\u015fturulmakta ve bu politikalar\u0131n \u00f6l\u00e7\u00fct\u00fcn\u00fc belirleyecek gereksinimler g\u00f6r\u00fcld\u00fc\u011f\u00fc gibi verilmektedir&#8230;<\/p>\n<p>12. sat\u0131rda ise politikam\u0131zdaki TimeRequirement nesnesinin kulland\u0131\u011f\u0131 i\u015flev sorumlulu\u011funu \u00fcstlenen TimeHandler s\u0131n\u0131f\u0131da her talep neticesinde eri\u015filebilsin diye AddSingleton metodu ile uygulaman\u0131n Dependency Injection provider\u0131na single instance olarak eklenmektedir.<\/p>\n<p>Bu ad\u0131mdan sonra \u00fcretilen politikay\u0131 kullanacak olan action yahut endpointler Authorize attributeu ile i\u015faretlenirken biryandan da a\u015fa\u011f\u0131daki gibi \u00fcretilen politika ile ili\u015fkilendirilmektedirler.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class HomeController : Controller\r\n    {\r\n        public IActionResult Index()\r\n        {\r\n            return View();\r\n        }\r\n        &#x5B;Authorize]\r\n        public IActionResult Page1()\r\n        {\r\n            return View();\r\n        }\r\n        &#x5B;Authorize(Policy = &quot;TimeControl&quot;)]\r\n        public IActionResult Page2()\r\n        {\r\n            return View();\r\n        }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131daki kod blo\u011funda &#8220;Page1&#8221; action\u0131 sadece Authorize attributeu ile i\u015faretlenmi\u015fken &#8220;Page2&#8221; action\u0131nda ise do\u011frulanmas\u0131n\u0131 istedi\u011fimiz politikan\u0131n hangisi oldu\u011funa dair tan\u0131mlama yap\u0131lm\u0131\u015f ve b\u00f6ylece politika bazl\u0131 do\u011frulama ger\u00e7ekle\u015ftirilmi\u015ftir.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/11\/ezgif-4-a9273cb336783.gif\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-12481\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/11\/ezgif-4-a9273cb336783.gif\" alt=\"Asp.NET Core Identity \u2013 Politika Bazl\u0131 Kimlik Do\u011frulama \u2013 XVI\" width=\"776\" height=\"316\" \/><\/a><\/p>\n<p>Evet&#8230; G\u00f6rselde de g\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere belirledi\u011fimiz politika belirtilen dakika aral\u0131\u011f\u0131nda sayfaya giri\u015f izni vermekte aksi taktirde ba\u015fka sayfaya y\u00f6nlendirmektedir.<\/p>\n<p>B\u00f6ylece bir yaz\u0131m\u0131z\u0131n daha sonuna gelmi\u015f bulunmaktay\u0131z. Bir sonraki i\u00e7eri\u011fimizde politika bazl\u0131 do\u011frulama yap\u0131lanmas\u0131yla belirli bir noktada kesi\u015fecek Claim bazl\u0131 yetkilendirme yap\u0131lanmas\u0131n\u0131 inceleyece\u011fiz. O halde \u015fimdilik g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<\/p>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<p>Not : \u00d6rnek indirmek i\u00e7in <a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/11\/PolicyBasedAuthorization.rar\">buraya<\/a> t\u0131klay\u0131n\u0131z.<\/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, Asp.NET Core Identity yaz\u0131 dizimizin 16. yaz\u0131s\u0131nda Politika Bazl\u0131 Kimlik Do\u011frulama(Policy Based Authorization) stratejisinin nas\u0131l i\u015flendi\u011fine dair kalem oynataca\u011f\u0131z. Ayriyetten ilgili i\u00e7eri\u011fi yaz\u0131 dizimizin olu\u015fturulma s\u00fcrecinde release edilen Asp.NET Core 3.0 versiyonu alt&#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":11583,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3033,2668,2656,2811,2832,2898],"tags":[3058,3059,3057,3056,3055,3054,3053],"class_list":["post-12439","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-net-core-3-0","category-asp-net-core-2","category-asp-net-core-2-mvc","category-asp-net-core-2-1","category-asp-net-core-2-2","category-asp-net-core-3-0","tag-addauthorization","tag-addpolicy","tag-authorizationhandler","tag-iauthorizationhandler","tag-iauthorizationrequirement","tag-policy-based-authorization","tag-politika-bazli-kimlik-dogrulama"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/12439","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=12439"}],"version-history":[{"count":46,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/12439\/revisions"}],"predecessor-version":[{"id":12490,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/12439\/revisions\/12490"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/11583"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=12439"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=12439"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=12439"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}