﻿
{"id":12100,"date":"2019-10-02T21:45:28","date_gmt":"2019-10-02T21:45:28","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=12100"},"modified":"2019-10-02T21:54:16","modified_gmt":"2019-10-02T21:54:16","slug":"asp-net-core-identity-sayfalari-yetkilendirme-authorization-xv","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/asp-net-core-identity-sayfalari-yetkilendirme-authorization-xv\/","title":{"rendered":"Asp.NET Core Identity &#8211; Sayfalar\u0131 Yetkilendirme (Authorization) &#8211; XV"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bir \u00f6nceki <a href=\"https:\/\/www.gencayyildiz.com\/blog\/asp-net-core-identity-rolemanager-sinifi-ile-rol-yonetimi-xiv\/\" target=\"_blank\" rel=\"noopener noreferrer\">RoleManager S\u0131n\u0131f\u0131 \u0130le Rol Y\u00f6netimi<\/a> ba\u015fl\u0131kl\u0131 makalemizde uygulama bazl\u0131 rol y\u00f6netimini incelemi\u015f bulunmaktay\u0131z. Bu i\u00e7eri\u011fimizde ise olu\u015fturulan roller odakl\u0131 <em>Sayfalar\u0131 Yetkilendirme(Authorization)<\/em> i\u015flemini ele alaca\u011f\u0131z.<\/p>\n<p>Her\u015feyden \u00f6nce yetkilendirilmi\u015f sayfalara yetkisi olmayan kullan\u0131c\u0131lar\u0131n eri\u015fmeye \u00e7al\u0131\u015fmas\u0131 durumunda nereye y\u00f6nlendirece\u011fimizi belirtmekle ba\u015flayal\u0131m. Bunun i\u00e7in Startup.cs dosyas\u0131nda a\u015fa\u011f\u0131daki konfig\u00fcrasyonu ger\u00e7ekle\u015ftirmemiz gerekmektedir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class Startup\r\n    {\r\n        public IConfiguration Configuration { get; set; }\r\n        public Startup(IConfiguration configuration) =&gt; Configuration = configuration;\r\n        public void ConfigureServices(IServiceCollection services)\r\n        {\r\n            services.AddDbContext&lt;AppDbContext&gt;(_ =&gt; _.UseSqlServer(Configuration&#x5B;&quot;ConnectionStrings:SqlServerConnectionString&quot;]));\r\n            services.AddIdentity&lt;AppUser, AppRole&gt;(_ =&gt;\r\n            {\r\n                _.Password.RequiredLength = 5; \/\/En az ka\u00e7 karakterli olmas\u0131 gerekti\u011fini belirtiyoruz.\r\n                _.Password.RequireNonAlphanumeric = false; \/\/Alfanumerik zorunlulu\u011funu kald\u0131r\u0131yoruz.\r\n                _.Password.RequireLowercase = false; \/\/K\u00fc\u00e7\u00fck harf zorunlulu\u011funu kald\u0131r\u0131yoruz.\r\n                _.Password.RequireUppercase = false; \/\/B\u00fcy\u00fck harf zorunlulu\u011funu kald\u0131r\u0131yoruz.\r\n                _.Password.RequireDigit = false; \/\/0-9 aras\u0131 say\u0131sal karakter zorunlulu\u011funu kald\u0131r\u0131yoruz.\r\n\r\n                _.User.RequireUniqueEmail = true; \/\/Email adreslerini tekille\u015ftiriyoruz.\r\n                _.User.AllowedUserNameCharacters = &quot;abc\u00e7defghi\u0131jklmno\u00f6pqrs\u015ftu\u00fcvwxyzABC\u00c7DEFGHI\u0130JKLMNO\u00d6PQRS\u015eTU\u00dcVWXYZ0123456789-._@+&quot;; \/\/Kullan\u0131c\u0131 ad\u0131nda ge\u00e7erli olan karakterleri belirtiyoruz.\r\n            }).AddPasswordValidator&lt;CustomPasswordValidation&gt;()\r\n              .AddUserValidator&lt;CustomUserValidation&gt;()\r\n              .AddErrorDescriber&lt;CustomIdentityErrorDescriber&gt;().AddEntityFrameworkStores&lt;AppDbContext&gt;()\r\n              .AddDefaultTokenProviders(); ;\r\n\r\n            services.ConfigureApplicationCookie(_ =&gt;\r\n            {\r\n                _.LoginPath = new PathString(&quot;\/User\/Login&quot;);\r\n                _.LogoutPath = new PathString(&quot;\/User\/Logout&quot;);\r\n                _.Cookie = new CookieBuilder\r\n                {\r\n                    Name = &quot;AspNetCoreIdentityExampleCookie&quot;, \/\/Olu\u015fturulacak Cookie'yi isimlendiriyoruz.\r\n                    HttpOnly = false, \/\/K\u00f6t\u00fc niyetli insanlar\u0131n client-side taraf\u0131ndan Cookie'ye eri\u015fmesini engelliyoruz.\r\n                    Expiration = TimeSpan.FromMinutes(2), \/\/Olu\u015fturulacak Cookie'nin vadesini belirliyoruz.\r\n                    SameSite = SameSiteMode.Lax, \/\/Top level navigasyonlara sebep olmayan requestlere Cookie'nin g\u00f6nderilmemesini belirtiyoruz.\r\n                    SecurePolicy = CookieSecurePolicy.Always \/\/HTTPS \u00fczerinden eri\u015filebilir yap\u0131yoruz.\r\n                };\r\n                _.SlidingExpiration = true; \/\/Expiration s\u00fcresinin yar\u0131s\u0131 kadar s\u00fcre zarf\u0131nda istekte bulunulursa e\u011fer geri kalan yar\u0131s\u0131n\u0131 tekrar s\u0131f\u0131rlayarak ilk ayarlanan s\u00fcreyi tazeleyecektir.\r\n                _.ExpireTimeSpan = TimeSpan.FromMinutes(2); \/\/CookieBuilder nesnesinde tan\u0131mlanan Expiration de\u011ferinin varsay\u0131lan de\u011ferlerle ezilme ihtimaline kar\u015f\u0131n tekrardan Cookie vadesi burada da belirtiliyor.\r\n                _.AccessDeniedPath = new PathString(&quot;\/authority\/page&quot;);\r\n            });\r\n\r\n            services.AddMvc();\r\n        }\r\n\r\n        public void Configure(IApplicationBuilder app, IHostingEnvironment env)\r\n        {\r\n            if (env.IsDevelopment())\r\n                app.UseDeveloperExceptionPage();\r\n\r\n            app.UseStatusCodePages();\r\n            app.UseStaticFiles();\r\n            app.UseAuthentication();\r\n            app.UseMvc(_ =&gt; _.MapRoute(&quot;Default&quot;, &quot;{controller=Home}\/{action=Index}\/{id?}&quot;));\r\n        }\r\n    }\r\n<\/pre>\n<p>37. sat\u0131ra g\u00f6z atarsan\u0131z e\u011fer &#8220;AccessDeniedPath&#8221; \u00f6zelli\u011fi sayesinde yetkilendirilmi\u015f sayfaya eri\u015fmeye \u00e7al\u0131\u015fan yetkisiz kullan\u0131c\u0131lar\u0131 &#8220;\/authority\/page&#8221; adresine y\u00f6nlendirmekteyiz.<\/p>\n<p>Bu i\u015flemden sonra yap\u0131lmas\u0131 gereken tek i\u015f yetkilendirilecek olan sayfalar\u0131n a\u015fa\u011f\u0131daki gibi Authorize attribute&#8217;u ile i\u015faretlenmesidir.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/10\/Asp.NET-Core-Identity-Sayfalar\u0131-Yetkilendirme-Authorization-XV.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-12106\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/10\/Asp.NET-Core-Identity-Sayfalar\u0131-Yetkilendirme-Authorization-XV.jpg\" alt=\"\" width=\"662\" height=\"645\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/10\/Asp.NET-Core-Identity-Sayfalar\u0131-Yetkilendirme-Authorization-XV.jpg 662w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/10\/Asp.NET-Core-Identity-Sayfalar\u0131-Yetkilendirme-Authorization-XV-300x292.jpg 300w\" sizes=\"auto, (max-width: 662px) 100vw, 662px\" \/><\/a><br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/10\/Asp.NET-Core-Identity-Sayfalar\u0131-Yetkilendirme-Authorization-XV.gif\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-12108\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/10\/Asp.NET-Core-Identity-Sayfalar\u0131-Yetkilendirme-Authorization-XV.gif\" alt=\"\" width=\"780\" height=\"304\" \/><\/a><br \/>\nYukar\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcne dikkat ederseniz e\u011fer oturumu a\u00e7\u0131k olan kullan\u0131c\u0131n\u0131n yetkileri de\u011fi\u015ftirildi\u011fi an tekrardan oturumunu yenilemesi gerekmektedir. Aksi taktirde mevcut oturum boyunca eski yetkileriyle s\u00fcrece devam edecektir.<\/p>\n<p>Evet&#8230; Yaz\u0131 dizimizin bu makalesinde de rol bazl\u0131 yetkilendirme hakk\u0131nda son noktay\u0131 koymu\u015f bulunuyoruz. Sonraki makalelerimizde Claims Bazl\u0131 Yetkilendirme(Claims Based Authorization) \u00fczerine konu\u015fuyor olaca\u011f\u0131z. O halde \u015fimdilik g\u00f6r\u00fc\u015fmek \u00fczere diyelim&#8230;<\/p>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<p>Not : \u00d6rnek projeyi indirmek i\u00e7in <a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/10\/AspNetCoreIdentityExample.rar\">buraya t\u0131klay\u0131n\u0131z<\/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, Bir \u00f6nceki RoleManager S\u0131n\u0131f\u0131 \u0130le Rol Y\u00f6netimi ba\u015fl\u0131kl\u0131 makalemizde uygulama bazl\u0131 rol y\u00f6netimini incelemi\u015f bulunmaktay\u0131z. Bu i\u00e7eri\u011fimizde ise olu\u015fturulan roller odakl\u0131 Sayfalar\u0131 Yetkilendirme(Authorization) i\u015flemini ele alaca\u011f\u0131z. Her\u015feyden \u00f6nce yetkilendirilmi\u015f sayfalara yetkisi olmayan kullan\u0131c\u0131lar\u0131n&#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":[2668,2656,2811,2832,2898],"tags":[2952,3017,2958,3016],"class_list":["post-12100","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","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-asp-net-core-identity","tag-asp-net-core-identity-authorization","tag-authorization","tag-sayfalari-yetkilendirme"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/12100","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=12100"}],"version-history":[{"count":10,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/12100\/revisions"}],"predecessor-version":[{"id":12114,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/12100\/revisions\/12114"}],"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=12100"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=12100"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=12100"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}