﻿
{"id":25582,"date":"2022-09-21T10:43:19","date_gmt":"2022-09-21T10:43:19","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=25582"},"modified":"2022-09-21T10:46:02","modified_gmt":"2022-09-21T10:46:02","slug":"openiddict-1-openiddict-nedir-ve-authorization-server-nasil-kurulur","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/openiddict-1-openiddict-nedir-ve-authorization-server-nasil-kurulur\/","title":{"rendered":"OpenIddict #1 &#8211; OpenIddict Nedir? ve Authorization Server Nas\u0131l Kurulur?"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu i\u00e7eri\u011fimizde Asp.NET Core uygulamalar\u0131nda OAuth 2.0\/OpenID Connect server&#8217;lar\u0131 olu\u015fturmak i\u00e7in tasarlanm\u0131\u015f olan ve a\u00e7\u0131k kaynak olarak geli\u015ftirilen OpenIddict Framework&#8217;\u00fcn\u00fc ele al\u0131yor olaca\u011f\u0131z.<\/p>\n<h4>OpenIddict Nedir?<\/h4>\n<p>OpenIddict ilk olarak 2015 y\u0131l\u0131nda temelleri at\u0131lm\u0131\u015f olan ve OpenID Connect server kurmak i\u00e7in \u00e7\u00f6z\u00fcm sa\u011flayan bir k\u00fct\u00fcphanedir. <a href=\"https:\/\/www.gencayyildiz.com\/blog\/identityserver4-yazi-serisi\/\" rel=\"noopener\" target=\"_blank\">Identity Server<\/a>&#8216;a nazaran biraz daha d\u00fc\u015f\u00fck seviyede i\u015flevselli\u011fe sahiptir.<\/p>\n<h4>Neden IdentityServer4 Yerine OpenIddict&#8217;i Kullanmal\u0131y\u0131z?<\/h4>\n<p>Y\u0131llarca .NET \u00e7at\u0131s\u0131 alt\u0131nda OAuth2 + OpenID Connect protokolleri e\u015fli\u011finde g\u00fcvenli bir token hizmeti sa\u011flamak i\u00e7in IdentityServer k\u00fct\u00fcphanesinden istifade etti\u011fimize \u00e7o\u011funuz vak\u0131ft\u0131r. Lakin IdentityServer, gelecek s\u00fcr\u00fcmleri lisanslamaya karar verdi\u011finden dolay\u0131, bu durum ticari uygulamalar i\u00e7in ekstradan maliyet kalemi olarak projelerimize yans\u0131m\u0131\u015f bulunmaktad\u0131r. Her ne kadar iyi bir yaz\u0131l\u0131m i\u00e7in ekstradan \u00f6deme yapmak pek \u00e7ok proje veya \u015firket i\u00e7in bir sorun te\u015fkil etmese de, yine de bir alternatif araman\u0131n zaman\u0131n\u0131n geldi\u011fini d\u00fc\u015f\u00fcnmedik de\u011fil. Haliyle yapt\u0131\u011f\u0131m\u0131z ufak ara\u015ft\u0131rmalar neticesinde OpenIddict k\u00fct\u00fcphanesiyle kar\u015f\u0131la\u015ft\u0131k. Denedik, test ettik. Bir nebze eksikliklerini g\u00f6zlemlediysekte, basit ama etkili oldu\u011funa kanaat getirdik. Ayr\u0131ca var olan bir ticari projemizde bu k\u00fct\u00fcphaneyi sahada tecr\u00fcbe etme \u015fans\u0131m\u0131z oldu. Nihayetinde edindi\u011fimiz kazan\u0131mlar e\u015fli\u011finde ve bu k\u00fct\u00fcphanenin t\u00fcm teferruatlar\u0131n\u0131 b\u00fct\u00fcnsel olarak derleyip bir yaz\u0131 serisi olarak sizlere aktarman\u0131n karar\u0131n\u0131 vermi\u015f bulunuyoruz.<\/p>\n<h4>OAuth2 ve OpenID Connect Nedir?(Hat\u0131rlayal\u0131m)<\/h4>\n<p>Esas\u0131nda bu kavramlar\u0131 <a href=\"https:\/\/www.gencayyildiz.com\/blog\/identityserver4-yazi-serisi-1-identityserver4-nedir-oauth-2-0-ve-openid-connect-protokolleri-nelerdir\/\" rel=\"noopener\" target=\"_blank\">IdentityServer4 Nedir? OAuth 2.0 ve OpenID Connect Protokolleri Nelerdir?<\/a> ba\u015fl\u0131kl\u0131 yaz\u0131m\u0131zda tam teferruatl\u0131 izah etmi\u015f bulunuyoruz. Yine de usul gere\u011fi bu i\u00e7eri\u011fimizde hafiften \u00f6zetlememiz gerekirse e\u011fer; <em><strong>OAuth 2.0<\/strong><\/em>, uygulamalar aras\u0131 veri transferinde kullan\u0131lan a\u00e7\u0131k bir yetkilendirme(authorization) protokol\u00fcyken, <em><strong>OpenID Connect<\/strong><\/em> ise bir protokolden ziyade OAuth 2.0 \u00fczerinde kimlik do\u011frulama(authentication) i\u015flemlerini \u00fcstlenen bir katmand\u0131r.<\/p>\n<h4>OpenIddict Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/h4>\n<p>Teknik olarak kullan\u0131c\u0131 ad\u0131 ve \u015fifre do\u011frulamalar\u0131n\u0131 harici bir provider olan authorization server \u00fczerinden ger\u00e7ekle\u015ftirdikten sonra, OAuth2 ve OpenID Connect ak\u0131\u015flar\u0131(flows) i\u00e7in OpenIddict devreye girmektedir. Bu ak\u0131\u015flar di\u011fer uygulamalar(clients) taraf\u0131ndan desteklenmekte ve temel olarak bu client&#8217;lar\u0131 kullanan kullan\u0131c\u0131lar i\u00e7in yetkilendirmeleri ger\u00e7ekle\u015ftirmektedir.<\/p>\n<p>Burada s\u00fcre\u00e7 \u015f\u00f6yle cereyan etmektedir. Kullan\u0131c\u0131, authorization server taraf\u0131ndan yetki kontrol\u00fc sa\u011flanan bir kayna\u011fa client \u00fczerinden eri\u015fmek istedi\u011fi zaman \u00f6nce bu kullan\u0131c\u0131 client taraf\u0131ndan authorization server&#8217;a y\u00f6nlendirilir. Kullan\u0131c\u0131 gerekli authentication&#8217;\u0131 sa\u011flarsa e\u011fer kayna\u011fa eri\u015febilmesi i\u00e7in yetkisinin olup olmad\u0131\u011f\u0131 de\u011ferlendirilerek, duruma g\u00f6re eri\u015fimi ger\u00e7ekle\u015ftirilecek ya da ger\u00e7ekle\u015ftirilmeyecektir.<\/p>\n<h4>Authorization Server Olu\u015fturma<\/h4>\n<p>\u015eimdi bu i\u00e7eri\u011fimizde bir Authorization Server i\u00e7in minimum kurulum gerektirecek \u015fekilde uygulama in\u015fa ederek sonraki i\u00e7eriklere temel olu\u015fturaca\u011f\u0131z.<\/p>\n<p>Authorization Server i\u00e7in login i\u015flemi yapabilece\u011fimiz bir sayfan\u0131n olmas\u0131 gayet yerinde olacakt\u0131r. Haliyle biz bu uygulamay\u0131 Asp.NET Core MVC mimarisinde tasarlamay\u0131 tercih ediyoruz.<\/p>\n<ul>\n<li><strong>Ad\u0131m 1 | <span style=\"color:green;font-size:12px;\">(Asp.NET Core MVC Uygulamas\u0131n\u0131n Olu\u015fturulmas\u0131)<\/span><\/strong><br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/09\/OpenIddict-Nedir-ve-Authorization-Server-Nasil-Kurulur.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/09\/OpenIddict-Nedir-ve-Authorization-Server-Nasil-Kurulur.png\" alt=\"OpenIddict #1 - OpenIddict Nedir? ve Authorization Server Nas\u0131l Kurulur?\" width=\"228\" height=\"207\" class=\"alignleft size-full wp-image-25591\" \/><\/a>\u0130lk olarak ismini istedi\u011finiz \u015fekilde belirtebilece\u011finiz bir Asp.NET Core MVC uygulamas\u0131 olu\u015ftural\u0131m. Bizlerin, bu serinin sonraki i\u00e7eriklerinde geli\u015ftirece\u011fimiz t\u00fcm uygulamalar\u0131 bu solution alt\u0131nda toparlayaca\u011f\u0131m\u0131z\u0131 \u015fimdiden bildirmekte fayda var.<\/p>\n<p>O y\u00fczden solution ad\u0131na &#8216;OpenIddict&#8217; ve Authorization Server uygulamas\u0131na da &#8216;OpenIddict.AuthorizationServer&#8217; ad\u0131n\u0131 vermi\u015f bulunmaktay\u0131z.\n<\/li>\n<li><strong>Ad\u0131m 2 | <span style=\"color:green;font-size:12px;\">(Local Sertifikan\u0131n Y\u00fcklenmesi)<\/span><\/strong><br \/>\nOpenIddict local&#8217;de \u00e7al\u0131\u015f\u0131rken bile sertifika gerektirebilmektedir. Bu y\u00fczden local certificate&#8217;in g\u00fcvenilir oldu\u011fundan emin olmak i\u00e7in ilgili proje dizininde powershell \u00fczerinden a\u015fa\u011f\u0131daki talimat\u0131n verilmesi yeterlidir.<\/p>\n<div style=\"text-align:center;\">\n<strong><code style=\"color:red;\">dotnet dev-certs https --trust<\/code><\/strong>\n<\/div>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/09\/OpenIddict-Nedir-ve-Authorization-Server-Nasil-Kurulur-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/09\/OpenIddict-Nedir-ve-Authorization-Server-Nasil-Kurulur-1.png\" alt=\"OpenIddict #1 - OpenIddict Nedir? ve Authorization Server Nas\u0131l Kurulur?\" width=\"478\" height=\"33\" class=\"aligncenter size-full wp-image-25592\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/09\/OpenIddict-Nedir-ve-Authorization-Server-Nasil-Kurulur-1.png 478w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/09\/OpenIddict-Nedir-ve-Authorization-Server-Nasil-Kurulur-1-300x21.png 300w\" sizes=\"auto, (max-width: 478px) 100vw, 478px\" \/><\/a>\n<\/li>\n<li><strong>Ad\u0131m 3 | <span style=\"color:green;font-size:12px;\">(Kimlik Do\u011frulamay\u0131-Authentication- Etkinle\u015ftirme)<\/strong><br \/>\n\u015eimdi olu\u015fturdu\u011fumuz uygulaman\u0131n kimlik do\u011frulama(authentication) \u00f6zelli\u011fini aktifle\u015ftirelim. Bunun i\u00e7in &#8216;Program.cs&#8217; dosyas\u0131 i\u00e7erisinde a\u015fa\u011f\u0131daki \u00e7al\u0131\u015fmay\u0131 ger\u00e7ekle\u015ftirelim.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n.\r\n.\r\n.\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nbuilder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)\r\n    .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =&gt; options.LoginPath = &quot;\/account\/login&quot;);\r\n.\r\n.\r\n.\r\n<\/pre>\n<\/div>\n<p>Yukar\u0131daki kod blo\u011funu incelerseniz bu MVC temelli uygulamam\u0131z i\u00e7in Cookie bazl\u0131 authentication operasyonunu ger\u00e7ekle\u015ftirmi\u015f bulunmaktay\u0131z. Ve ayr\u0131ca dikkat ederseniz &#8216;\/account\/login&#8217; adresi login i\u015flemleri i\u00e7in ayarlanm\u0131\u015ft\u0131r.<\/p>\n<p>Bu yap\u0131land\u0131rmadan sonra a\u015fa\u011f\u0131daki gibi &#8216;UseAuthentication&#8217; middleware&#8217;ini uygun yerde \u00e7a\u011f\u0131rmam\u0131z gerekmektedir.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n.\r\n.\r\n.\r\napp.UseRouting();\r\n\r\napp.UseAuthentication();\r\n\r\napp.UseAuthorization();\r\n\r\napp.MapControllerRoute(\r\n    name: &quot;default&quot;,\r\n    pattern: &quot;{controller=Home}\/{action=Index}\/{id?}&quot;);\r\n.\r\n.\r\n.\r\n<\/pre>\n<\/div>\n<\/li>\n<li><strong>Ad\u0131m 4 | <span style=\"color:green;font-size:12px;\">(Login Sayfas\u0131n\u0131n Tasarlanmas\u0131)<\/strong><br \/>\nArt\u0131k authentication&#8217;\u0131 etkinle\u015ftirdi\u011fimize g\u00f6re kullan\u0131c\u0131lar\u0131n kimli\u011fini do\u011frulamas\u0131 i\u00e7in bir login sayfas\u0131na ihtiyac\u0131m\u0131z olacakt\u0131r. Bunun i\u00e7in \u00f6ncelikle kullan\u0131c\u0131n\u0131n kimlik do\u011frulamas\u0131 i\u00e7in ihtiya\u00e7 duyulan bilgileri i\u00e7eren viewmodel nesnesini tasarlayarak ba\u015flayal\u0131m.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nnamespace OpenIddict.AuthorizationServer.ViewModels\r\n{\r\n    public class LoginVM\r\n    {\r\n        &#x5B;Required]\r\n        public string Username { get; set; }\r\n        &#x5B;Required]\r\n        public string Password { get; set; }\r\n    }\r\n}\r\n<\/pre>\n<\/div>\n<p>Ard\u0131ndan kimlik do\u011frulama sorumlulu\u011funu \u00fcstlenecek olan &#8216;AccountController&#8217; s\u0131n\u0131f\u0131n\u0131 a\u015fa\u011f\u0131daki gibi tasarlayal\u0131m.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nnamespace OpenIddict.AuthorizationServer.Controllers\r\n{\r\n    public class AccountController : Controller\r\n    {\r\n        &#x5B;HttpGet]\r\n        public IActionResult Login(string returnUrl)\r\n        {\r\n            TempData&#x5B;&quot;returnUrl&quot;] = returnUrl;\r\n            return View();\r\n        }\r\n\r\n        &#x5B;HttpPost]\r\n        &#x5B;ValidateAntiForgeryToken]\r\n        public async Task&lt;IActionResult&gt; Login(LoginVM model)\r\n        {\r\n            if (ModelState.IsValid)\r\n            {\r\n                List&lt;Claim&gt; claims = new() { new(ClaimTypes.Name, model.Username) };\r\n                ClaimsIdentity identity = new(claims, CookieAuthenticationDefaults.AuthenticationScheme);\r\n                ClaimsPrincipal principal = new(identity);\r\n                await HttpContext.SignInAsync(principal);\r\n\r\n                if (Url.IsLocalUrl(TempData&#x5B;&quot;returnUrl&quot;]?.ToString()))\r\n                    return Redirect(TempData&#x5B;&quot;returnUrl&quot;].ToString());\r\n\r\n                return RedirectToAction(&quot;Index&quot;, &quot;Home&quot;);\r\n            }\r\n\r\n            return View(model);\r\n        }\r\n\r\n        public async Task&lt;IActionResult&gt; Logout()\r\n        {\r\n            await HttpContext.SignOutAsync();\r\n            return RedirectToAction(&quot;Index&quot;, &quot;Home&quot;);\r\n        }\r\n    }\r\n}\r\n<\/pre>\n<\/div>\n<p>Yukar\u0131daki \u00f6rne\u011fi incelerseniz e\u011fer <strong>14<\/strong> ile <strong>30.<\/strong> sat\u0131r aral\u0131\u011f\u0131nda kimlik do\u011frulaman\u0131n farazi olarak ger\u00e7ekle\u015ftirildi\u011fini kabul ediyoruz. Normal \u015fartlarda burada &#8216;LoginVM&#8217;den gelen verileri veritaban\u0131ndan do\u011frulay\u0131p ona g\u00f6re aksiyon alman\u0131z gerekmektedir. Bizler i\u00e7eri\u011fi \u015fi\u015firmemek ad\u0131na buralar\u0131 es ge\u00e7iyor ve direkt olarak gelen bilgilere g\u00f6re bir oturum a\u00e7ma i\u015flemi ger\u00e7ekle\u015ftiriyoruz. <strong>19.<\/strong> sat\u0131ra bakarsan\u0131z e\u011fer <code>CookieAuthenticationDefaults.AuthenticationScheme<\/code> ile Cookie authentication \u015femas\u0131n\u0131 belirtiyoruz. <strong>21.<\/strong> sat\u0131rdaki <code>SignInAsync<\/code> metodu ise &#8216;CookieAuthenticationHandler&#8217;\u0131 \u00e7a\u011f\u0131ran ve login neticesinde \u00fcretilecek de\u011feri cookie&#8217;ye yerle\u015ftirip signin yapmam\u0131z\u0131 sa\u011flayacak olan bir extension metottur. Ayn\u0131 \u015fekilde <strong>34.<\/strong> sat\u0131rda <code>SignOutAsync<\/code> metodu ile signout i\u015flemini ger\u00e7ekle\u015ftiriyoruz.<\/p>\n<p>Bu ad\u0131m\u0131n sonuncu hamlesi olarak &#8216;Login&#8217; action&#8217;\u0131n\u0131n view&#8217;ini a\u015fa\u011f\u0131daki gibi tasarlayal\u0131m.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n@model OpenIddict.AuthorizationServer.ViewModels.LoginVM\r\n&lt;form autocomplete=&quot;off&quot; asp-route=&quot;Login&quot;&gt;\r\n    &lt;div class=&quot;card&quot;&gt;\r\n        &lt;input type=&quot;text&quot; class=&quot;form-control form-control-lg&quot; placeholder=&quot;Username&quot; asp-for=&quot;Username&quot; autofocus&gt;\r\n        &lt;input type=&quot;password&quot; class=&quot;form-control form-control-lg form-control-last&quot; placeholder=&quot;Password&quot; asp-for=&quot;Password&quot;&gt;\r\n    &lt;\/div&gt;\r\n    &lt;p&gt;\r\n        &lt;button type=&quot;submit&quot; class=&quot;btn btn-dark btn-block mt-3&quot;&gt;Login&lt;\/button&gt;\r\n    &lt;\/p&gt;\r\n&lt;\/form&gt;\r\n<\/pre>\n<\/div>\n<\/li>\n<li><strong>Ad\u0131m 5 | <span style=\"color:green;font-size:12px;\">(Anasayfay\u0131 G\u00fcncellemek)<\/strong><br \/>\nSon olarak, kimli\u011fi do\u011frulanmam\u0131\u015f kullan\u0131c\u0131lar i\u00e7in anasayfada gerekli g\u00fcncellemeleri ger\u00e7ekle\u015ftirelim. Bunun i\u00e7in &#8216;HomeController&#8217;\u0131n &#8216;Index&#8217; action&#8217;\u0131n\u0131n view&#8217;ine gelelim ve a\u015fa\u011f\u0131daki \u00e7al\u0131\u015fmay\u0131 icra edelim.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n@using Microsoft.AspNetCore.Authentication\r\n@if (User.Identity.IsAuthenticated)\r\n{\r\n    var authenticationResult = await Context.AuthenticateAsync();\r\n    var issued = authenticationResult.Properties.Items&#x5B;&quot;.issued&quot;];\r\n    var expires = authenticationResult.Properties.Items&#x5B;&quot;.expires&quot;];\r\n\r\n    &lt;div&gt;\r\n        &lt;h2&gt;@User.Identity.Name &lt;\/h2&gt;\r\n        &lt;p&gt;olarak oturum a\u00e7t\u0131n\u0131z.&lt;\/p&gt;\r\n        &lt;hr \/&gt;\r\n        &lt;dl&gt;\r\n            &lt;dt&gt;Issued&lt;\/dt&gt;\r\n            &lt;dd&gt;@issued&lt;\/dd&gt;\r\n            &lt;dt&gt;Expires&lt;\/dt&gt;\r\n            &lt;dd&gt;@expires&lt;\/dd&gt;\r\n        &lt;\/dl&gt;\r\n        &lt;hr \/&gt;\r\n        &lt;p&gt;&lt;a class=&quot;btn btn-dark&quot; asp-controller=&quot;Account&quot; asp-action=&quot;Logout&quot;&gt;\u00c7\u0131k\u0131\u015f yap&lt;\/a&gt;&lt;\/p&gt;\r\n\r\n    &lt;\/div&gt;\r\n}\r\n\r\n@if (!User.Identity.IsAuthenticated)\r\n{\r\n    &lt;div&gt;\r\n        &lt;p&gt;Oturum a\u00e7mal\u0131s\u0131n\u0131z!&lt;\/p&gt;\r\n        &lt;p&gt;&lt;a class=&quot;btn btn-sm btn-dark&quot; asp-controller=&quot;Account&quot; asp-action=&quot;Login&quot;&gt;Oturum a\u00e7&lt;\/a&gt;&lt;\/p&gt;\r\n    &lt;\/div&gt;\r\n}\r\n<\/pre>\n<\/div>\n<p>E\u011fer ki, kullan\u0131c\u0131 authenticated olduysa belli ba\u015fl\u0131 bilgilerini ekranda g\u00f6steriyoruz. Yok e\u011fer authenticated olmad\u0131ysa, oturum a\u00e7ma sayfas\u0131na g\u00f6t\u00fcren bir buton yerle\u015ftirerek kullan\u0131c\u0131y\u0131 y\u00f6nlendiriyoruz. Tabi ki de sizler daha farkl\u0131 bir \u015fekilde tasar\u0131m ger\u00e7ekle\u015ftirebilirsiniz \ud83d\ude42<\/p>\n<p>Uygulama ba\u015flat\u0131ld\u0131\u011f\u0131nda :<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/09\/OpenIddict-Nedir-ve-Authorization-Server-Nasil-Kurulur-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/09\/OpenIddict-Nedir-ve-Authorization-Server-Nasil-Kurulur-2.png\" alt=\"OpenIddict #1 - OpenIddict Nedir? ve Authorization Server Nas\u0131l Kurulur?\" width=\"406\" height=\"156\" class=\"aligncenter size-full wp-image-25599\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/09\/OpenIddict-Nedir-ve-Authorization-Server-Nasil-Kurulur-2.png 406w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/09\/OpenIddict-Nedir-ve-Authorization-Server-Nasil-Kurulur-2-300x115.png 300w\" sizes=\"auto, (max-width: 406px) 100vw, 406px\" \/><\/a><br \/>\nOturum a\u00e7arken :<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/09\/OpenIddict-Nedir-ve-Authorization-Server-Nasil-Kurulur-3.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/09\/OpenIddict-Nedir-ve-Authorization-Server-Nasil-Kurulur-3.png\" alt=\"OpenIddict #1 - OpenIddict Nedir? ve Authorization Server Nas\u0131l Kurulur?\" width=\"452\" height=\"207\" class=\"aligncenter size-full wp-image-25600\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/09\/OpenIddict-Nedir-ve-Authorization-Server-Nasil-Kurulur-3.png 452w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/09\/OpenIddict-Nedir-ve-Authorization-Server-Nasil-Kurulur-3-300x137.png 300w\" sizes=\"auto, (max-width: 452px) 100vw, 452px\" \/><\/a><br \/>\nve<br \/>\nOturum a\u00e7\u0131ld\u0131ktan sonra :<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/09\/OpenIddict-Nedir-ve-Authorization-Server-Nasil-Kurulur-4.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/09\/OpenIddict-Nedir-ve-Authorization-Server-Nasil-Kurulur-4.png\" alt=\"OpenIddict #1 - OpenIddict Nedir? ve Authorization Server Nas\u0131l Kurulur?\" width=\"415\" height=\"350\" class=\"aligncenter size-full wp-image-25601\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/09\/OpenIddict-Nedir-ve-Authorization-Server-Nasil-Kurulur-4.png 415w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/09\/OpenIddict-Nedir-ve-Authorization-Server-Nasil-Kurulur-4-300x253.png 300w\" sizes=\"auto, (max-width: 415px) 100vw, 415px\" \/><\/a>\n<\/li>\n<\/ul>\n<p>Netice itibariyle;<br \/>\nArt\u0131k elimizde authentication ile \u00e7al\u0131\u015fan temel bir Asp.NET Core MVC projemiz mevcuttur. Bundan sonraki i\u00e7eriklerimizde OpenIddict ile yapaca\u011f\u0131m\u0131z \u00e7al\u0131\u015fmalarda bu uygulama \u00fczerinden temel yetkilendirme operasyonlar\u0131n\u0131 ger\u00e7ekle\u015ftiriyor olaca\u011f\u0131z.<\/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 uygulaman\u0131n kaynak kodlar\u0131na a\u015fa\u011f\u0131daki github adresinden eri\u015febilirsiniz.<br \/>\n<a href=\"https:\/\/github.com\/gncyyldz\/OpenIddict-Authorization-Server-Example\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/gncyyldz\/OpenIddict-Authorization-Server-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 Asp.NET Core uygulamalar\u0131nda OAuth 2.0\/OpenID Connect server&#8217;lar\u0131 olu\u015fturmak i\u00e7in tasarlanm\u0131\u015f olan ve a\u00e7\u0131k kaynak olarak geli\u015ftirilen OpenIddict Framework&#8217;\u00fcn\u00fc ele al\u0131yor olaca\u011f\u0131z. OpenIddict Nedir? OpenIddict ilk olarak 2015 y\u0131l\u0131nda temelleri at\u0131lm\u0131\u015f olan&#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":3014,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4665],"tags":[4666,4669,4667,4668],"class_list":["post-25582","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-openiddict","tag-openiddict","tag-openiddict-authorization-server","tag-openiddict-oauth-2-0","tag-openiddict-openid-connect"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/25582","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=25582"}],"version-history":[{"count":17,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/25582\/revisions"}],"predecessor-version":[{"id":25604,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/25582\/revisions\/25604"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/3014"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=25582"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=25582"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=25582"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}