﻿
{"id":25743,"date":"2022-10-23T21:34:18","date_gmt":"2022-10-23T21:34:18","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=25743"},"modified":"2022-10-23T21:34:50","modified_gmt":"2022-10-23T21:34:50","slug":"openiddict-4-openid-connect","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/openiddict-4-openid-connect\/","title":{"rendered":"OpenIddict #4 &#8211; OpenId Connect"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu i\u00e7eri\u011fimizde OpenIddict k\u00fct\u00fcphanesi ile <em>OpenID Connect<\/em> protokol\u00fcn\u00fc nas\u0131l kullanabilece\u011fimizi ve ekstra kullan\u0131c\u0131 bilgilerini sorgulaman\u0131n nas\u0131l yap\u0131labilece\u011fini inceliyor olaca\u011f\u0131z.<\/p>\n<p>Her \u015feyden \u00f6nce temel terminolojiyi oturtabilmek i\u00e7in OpenId Connect&#8217;in ne oldu\u011funu izah ederek ba\u015flamakta fayda g\u00f6r\u00fcyorum.<\/p>\n<h4>OpenID Connect Nedir?<\/h4>\n<p>Esas\u0131nda OpenID Connect hakk\u0131nda detayl\u0131 bilgiyi <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\">OAuth 2.0 ve OpenID Connect Protokolleri Nelerdir?<\/a> ba\u015fl\u0131kl\u0131 makalemden edinebilirsiniz. Amma velakin burada da ufak bir tan\u0131mlamada bulunman\u0131n bu i\u00e7eri\u011fin insicam\u0131 i\u00e7in gerekli oldu\u011funu d\u00fc\u015f\u00fcnd\u00fc\u011f\u00fcmden ilgili yaz\u0131dan ufak bir al\u0131nt\u0131yla devam etmek istiyorum&#8230;<\/p>\n<blockquote><p><em>&#8230;OpenID Connect, esas\u0131nda bir protokolden ziyade OAuth 2.0 \u00fczerinde kimlik do\u011frulama(authentication) i\u015flemlerini \u00fcstlenen bir katmand\u0131r. API dostu bir yap\u0131 sa\u011flamakta ve i\u015flemleri basit tutarak JWT kullan\u0131m\u0131n\u0131 kolayla\u015ft\u0131rmaktad\u0131r&#8230;<\/em><\/p><\/blockquote>\n<p>OpenID Connect protokol\u00fc kimlik do\u011frulama i\u015flemlerini \u00fcstlendi\u011fi i\u00e7in i\u00e7erisinde kullan\u0131c\u0131 bilgilerini bar\u0131nd\u0131ran <em style=\"color:green;\">identity token<\/em> ad\u0131nda bir token sa\u011flamaktad\u0131r. Bizler bu token&#8217;\u0131 kullanarak ekstradan kullan\u0131c\u0131 bilgilerini edinebilmekte ve varsa ekstradan i\u015flemleri ger\u00e7ekle\u015ftirebilmekteyiz.<\/p>\n<h4>OpenID Connect Protokol\u00fcn\u00fc Etkinle\u015ftirme<\/h4>\n<p>OpenIddict, OpenID Connect protokol\u00fcn\u00fc zaten uygulamaktad\u0131r ve <code>openid<\/code> scope&#8217;u e\u015fli\u011finde yap\u0131lan taleplere kar\u015f\u0131l\u0131k <em style=\"color:green;\">identity token<\/em> d\u00f6nd\u00fcrmektedir. Bunu a\u015fa\u011f\u0131daki gibi test edebilir ve <em style=\"color:green;\">identity token<\/em>&#8216;\u0131n elde edildi\u011fini g\u00f6rebilirsiniz.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/OpenIddict-4-OpenId-Connect.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/OpenIddict-4-OpenId-Connect.png\" alt=\"OpenIddict #4 - OpenId Connect\" width=\"581\" height=\"655\" class=\"aligncenter size-full wp-image-25747\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/OpenIddict-4-OpenId-Connect.png 581w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/OpenIddict-4-OpenId-Connect-266x300.png 266w\" sizes=\"auto, (max-width: 581px) 100vw, 581px\" \/><\/a>Yukar\u0131daki istek neticesinde response olarak access token e\u015fli\u011finde a\u015fa\u011f\u0131daki gibi bir identity token elde edilecektir.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/OpenIddict-4-OpenId-Connect-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/OpenIddict-4-OpenId-Connect-1.png\" alt=\"OpenIddict #4 - OpenId Connect\" width=\"535\" height=\"360\" class=\"aligncenter size-full wp-image-25749\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/OpenIddict-4-OpenId-Connect-1.png 535w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/OpenIddict-4-OpenId-Connect-1-300x202.png 300w\" sizes=\"auto, (max-width: 535px) 100vw, 535px\" \/><\/a>Bu identity token de\u011ferini jwt.io \u00fczerinden \u00e7\u00f6z\u00fcmleyerek incelersek e\u011fer;<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/OpenIddict-4-OpenId-Connect-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/OpenIddict-4-OpenId-Connect-2.png\" alt=\"OpenIddict #4 - OpenId Connect\" width=\"931\" height=\"437\" class=\"aligncenter size-full wp-image-25751\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/OpenIddict-4-OpenId-Connect-2.png 931w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/OpenIddict-4-OpenId-Connect-2-300x141.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/OpenIddict-4-OpenId-Connect-2-768x360.png 768w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/OpenIddict-4-OpenId-Connect-2-520x245.png 520w\" sizes=\"auto, (max-width: 931px) 100vw, 931px\" \/><\/a>\u015feklinde bir i\u00e7eri\u011fe sahip oldu\u011funu g\u00f6zlemlemekteyiz.<\/p>\n<p>Identity token&#8217;a istedi\u011finiz bilgileri depolayabilirsiniz. Bunun i\u00e7in e\u011fer ki ak\u0131\u015f olarak authorization code flow&#8217;u kullan\u0131yorsan\u0131z &#8216;AuthorizationController&#8217; i\u00e7erisindeki &#8216;Authorize&#8217; metodunda yahut client credential flow&#8217;u kullan\u0131yorsan\u0131z da token endpoint&#8217;ine kar\u015f\u0131l\u0131k gelen &#8216;Exchange&#8217; fonksiyonunda \u00e7al\u0131\u015fabilirsiniz.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        public async Task&lt;IActionResult&gt; Authorize(string accept, string deny)\r\n        {\r\n            .\r\n            .\r\n            .\r\n            var identity = new ClaimsIdentity(OpenIddictServerAspNetCoreDefaults.AuthenticationScheme);\r\n            identity.AddClaim(OpenIddictConstants.Claims.Subject, result.Principal.Identity.Name, Destinations.AccessToken);\r\n            identity.AddClaim(JwtRegisteredClaimNames.Aud, &quot;Example-OpenIddict&quot;, Destinations.AccessToken, Destinations.IdentityToken);\r\n            identity.AddClaim(&quot;ornek-claim&quot;, &quot;ornek claim value&quot;, Destinations.AccessToken, Destinations.IdentityToken);\r\n            identity.AddClaim(&quot;a&quot;, &quot;a value&quot;, Destinations.AccessToken, Destinations.IdentityToken);\r\n            identity.AddClaim(&quot;b&quot;, &quot;b value&quot;, Destinations.AccessToken, Destinations.IdentityToken);\r\n            .\r\n            .\r\n            .\r\n        }\r\n<\/pre>\n<\/div>\n<h4>Userinfo Endpoint&#8217;i<\/h4>\n<p>OpenID Connect protokol\u00fc kullan\u0131c\u0131 hakk\u0131nda bilgi al\u0131nabilmesi i\u00e7in bir endpoint sa\u011flayabilmektedir. Bunun i\u00e7in endpoint&#8217;e dair a\u015fa\u011f\u0131daki gibi konfig\u00fcrasyonun ger\u00e7ekle\u015ftirilmesi gerekmektedir.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    .AddServer(options =&gt;\r\n    {\r\n        options.SetTokenEndpointUris(&quot;\/connect\/token&quot;)\r\n               .SetAuthorizationEndpointUris(&quot;\/connect\/authorize&quot;)\r\n               .SetLogoutEndpointUris(&quot;\/connect\/logout&quot;)\r\n               \/\/Kullan\u0131c\u0131 bilgilerini edinebilmek i\u00e7in userinfo endpoint'ini set ediyoruz.\r\n               .SetUserinfoEndpointUris(&quot;\/connect\/userinfo&quot;);\r\n\r\n        options.UseAspNetCore()\r\n               .EnableTokenEndpointPassthrough()\r\n               .EnableAuthorizationEndpointPassthrough()\r\n               .EnableLogoutEndpointPassthrough()\r\n               .EnableUserinfoEndpointPassthrough();\r\n        .\r\n        .\r\n        .\r\n    });\r\n<\/pre>\n<\/div>\n<p>Bu konfig\u00fcrasyondan sonra authorization server&#8217;\u0131 yeniden aya\u011fa kald\u0131r\u0131p<br \/>\n<span style=\"color:red;\"><em>https:\/\/localhost:7047\/<span style=\"color:green;\">.well-known\/openid-configuration<\/em><\/span><\/span><br \/>\nadresine istek g\u00f6nderirseniz userinfo endpoint&#8217;inin uygulamaya eklendi\u011fini g\u00f6rebilirsiniz.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/OpenIddict-4-OpenId-Connect-3.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/OpenIddict-4-OpenId-Connect-3.png\" alt=\"OpenIddict #4 - OpenId Connect\" width=\"513\" height=\"157\" class=\"aligncenter size-full wp-image-25756\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/OpenIddict-4-OpenId-Connect-3.png 513w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/OpenIddict-4-OpenId-Connect-3-300x92.png 300w\" sizes=\"auto, (max-width: 513px) 100vw, 513px\" \/><\/a>Bu ad\u0131mdan sonra customer&#8217;lar ile hangi kullan\u0131c\u0131 bilgilerini payla\u015fmak istiyorsak ona g\u00f6re userinfo endpoint&#8217;ini geli\u015ftirmeye odaklanabiliriz. Bunun i\u00e7in &#8216;AuthorizationController&#8217; i\u00e7erisinde &#8216;Userinfo&#8217; action&#8217;\u0131n\u0131n\u0131 a\u015fa\u011f\u0131daki gibi geli\u015ftirebiliriz.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class AuthorizationController : Controller\r\n    {\r\n        .\r\n        .\r\n        .\r\n        &#x5B;Authorize(AuthenticationSchemes = OpenIddictServerAspNetCoreDefaults.AuthenticationScheme)]\r\n        &#x5B;HttpGet(&quot;~\/connect\/userinfo&quot;)]\r\n        public async Task&lt;IActionResult&gt; Userinfo()\r\n        {\r\n            var claimPrincipal = (await HttpContext.AuthenticateAsync(OpenIddictServerAspNetCoreDefaults.AuthenticationScheme)).Principal;\r\n\r\n            return Ok(new\r\n            {\r\n                Name = claimPrincipal.GetClaim(OpenIddictConstants.Claims.Subject),\r\n                Aud = claimPrincipal.GetClaim(OpenIddictConstants.Claims.Audience),\r\n                A = claimPrincipal.GetClaim(&quot;a&quot;),\r\n                B = claimPrincipal.GetClaim(&quot;b&quot;),\r\n                OrnekClaim = claimPrincipal.GetClaim(&quot;ornek-claim&quot;),\r\n            });\r\n        }\r\n    }\r\n<\/pre>\n<\/div>\n<p>Dikkat ederseniz userinfo endpoint&#8217;ine ge\u00e7erli bir access token oldu\u011fu taktirde eri\u015filebilmektedir. Gerekli token e\u015fli\u011finde <code>\/connect\/userinfo<\/code> adresine GET iste\u011fi yap\u0131l\u0131rsa a\u015fa\u011f\u0131daki gibi kullan\u0131c\u0131 bilgileri elde edilecektir.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/OpenIddict-4-OpenId-Connect-4.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/10\/OpenIddict-4-OpenId-Connect-4.png\" alt=\"OpenIddict #4 - OpenId Connect\" width=\"272\" height=\"128\" class=\"aligncenter size-full wp-image-25757\" \/><\/a><\/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 OpenIddict k\u00fct\u00fcphanesi ile OpenID Connect protokol\u00fcn\u00fc nas\u0131l kullanabilece\u011fimizi ve ekstra kullan\u0131c\u0131 bilgilerini sorgulaman\u0131n nas\u0131l yap\u0131labilece\u011fini inceliyor olaca\u011f\u0131z. Her \u015feyden \u00f6nce temel terminolojiyi oturtabilmek i\u00e7in OpenId Connect&#8217;in ne oldu\u011funu izah ederek ba\u015flamakta&#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":[3833,4666,4668,4689,3894],"class_list":["post-25743","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-openiddict","tag-openid-connect","tag-openiddict","tag-openiddict-openid-connect","tag-openiddict-userinfo-endpoint","tag-userinfo-endpoint"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/25743","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=25743"}],"version-history":[{"count":9,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/25743\/revisions"}],"predecessor-version":[{"id":25759,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/25743\/revisions\/25759"}],"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=25743"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=25743"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=25743"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}