{"id":71307,"date":"2020-02-24T22:18:55","date_gmt":"2020-02-24T19:18:55","guid":{"rendered":"https:\/\/prohoster.info\/blog\/identityserver4-osnovnye-ponyatiya-openid-connect-oauth-2-0-i-jwt"},"modified":"2020-03-03T16:14:27","modified_gmt":"2020-03-03T13:14:27","slug":"identityserver4-osnovnye-ponyatiya-openid-connect-oauth-2-0-i-jwt","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/identityserver4-osnovnye-ponyatiya-openid-connect-oauth-2-0-i-jwt","title":{"rendered":"IdentityServer4. Konceptet kryesore. OpenID Connect, OAuth 2.0 dhe JWT","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Me k\u00ebt\u00eb postim dua t\u00eb hap nj\u00eb seri artikujsh kushtuar IdentityServer4. Do t\u00eb fillojm\u00eb me konceptet baz\u00eb.<\/p>\n<p><\/p>\n<p>Protokolli m\u00eb premtues i autentikimit n\u00eb k\u00ebt\u00eb moment \u00ebsht\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/openid.net\/connect\/\">OpenID Connect<\/a><\/noindex>, nd\u00ebrsa protokolli i autorizimit (dh\u00ebnies s\u00eb aksesit) \u00ebsht\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/OAuth#OAuth_2.0\">OAuth 2.0<\/a><\/noindex>. <noindex><a rel=\"nofollow\" href=\"https:\/\/identityserver4.readthedocs.io\/en\/latest\/\">IdentityServer4<\/a><\/noindex> zbaton k\u00ebto dy protokolle. Ai \u00ebsht\u00eb i optimizuar p\u00ebr zgjidhjen e <strong>problemeve tipike<\/strong> t\u00eb siguris\u00eb.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<blockquote><p><noindex><a rel=\"nofollow\" href=\"https:\/\/openid.net\/connect\/\">OpenID Connect<\/a><\/noindex> \u2014 \u00ebsht\u00eb nj\u00eb protokoll dhe standard autentikimi; ai nuk jep akses te burimet (Web API), por meq\u00eb \u00ebsht\u00eb nd\u00ebrtuar mbi protokollin e autorizimit <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/OAuth#OAuth_2.0\">OAuth 2.0<\/a><\/noindex>, ai ju lejon t\u00eb merrni parametrat e profilit t\u00eb p\u00ebrdoruesit sikur t\u00eb kishit marr\u00eb akses te burimi <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.identityserver.io\/en\/latest\/endpoints\/userinfo.html\">UserInfo<\/a><\/noindex>.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/JSON_Web_Token\">JWT<\/a><\/noindex> (JSON Web Token) \u00ebsht\u00eb nj\u00eb standard web q\u00eb p\u00ebrcakton m\u00ebnyr\u00ebn e transmetimit t\u00eb t\u00eb dh\u00ebnave t\u00eb p\u00ebrdoruesit n\u00eb format JSON n\u00eb form\u00eb t\u00eb enkriptuar.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/tools.ietf.org\/html\/rfc6749\">OAuth 2.0 (RFC 6749)<\/a><\/noindex> \u2014 \u00ebsht\u00eb nj\u00eb protokoll dhe standard autorizimi. Ai u lejon aplikacioneve t\u00eb marrin akses n\u00eb burime t\u00eb mbrojtura, p\u00ebr shembull te Web API.<\/p><\/blockquote>\n<p>Le t'i hedhim nj\u00eb sy diagramit t\u00eb qasjes n\u00eb nj\u00eb burim t\u00eb mbrojtur dhe t\u00eb shqyrtojm\u00eb hapat kryesor\u00eb si edhe terminologjin\u00eb e p\u00ebrdorur:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"IdentityServer4. Konceptet kryesore. OpenID Connect, OAuth 2.0 dhe JWT\" src=\"\/wp-content\/uploads\/2020\/02\/0515b7bc9a4598c557189f8e5ff2c3f5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ol>\n<li>\n<p>Klienti i k\u00ebrkon p\u00ebrdoruesit leje p\u00ebr t\u00eb kaluar autorizimin n\u00eb emrin e tij. <strong>K\u03bb\u03af\u03bf\u03c5ent<\/strong> \u2014 \u00ebsht\u00eb nj\u00eb aplikacion klient q\u00eb qaset n\u00eb burime t\u00eb mbrojtura n\u00eb em\u00ebr t\u00eb pronarit t\u00eb burimeve. <strong>Burimi<\/strong> \u2014 jan\u00eb t\u00eb gjitha sh\u00ebrbimet tona t\u00eb mbrojtura <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/ru-ru\/aspnet\/core\/tutorials\/first-web-api?view=aspnetcore-3.1&amp;tabs=visual-studio\">Web API<\/a><\/noindex>.<\/p>\n<p>\n<\/li>\n<li>\n<p>User i lejon aplikacionit klient t\u00eb kaloj\u00eb autorizimin n\u00eb emrin e tij, p\u00ebr shembull duke futur login dhe fjal\u00ebkalimin. Login-i dhe fjal\u00ebkalimi do t\u00eb sh\u00ebrbejn\u00eb si grant autorizimi p\u00ebr aplikacionin klient. <strong>User (pronari i burimit)<\/strong> \u2014 \u00ebsht\u00eb nj\u00eb program ose nj\u00eb person q\u00eb mund t\u00eb jap\u00eb akses n\u00eb burime t\u00eb mbrojtura, p\u00ebr shembull duke futur login-in (username) dhe fjal\u00ebkalimin (password);<\/p>\n<p>\n<\/li>\n<li>\n<p>Aplikacioni klient k\u00ebrkon token-in e aksesit nga <code>IdentityServer4<\/code> duke dh\u00ebn\u00eb informacion p\u00ebr veten (<code>client_id<\/code>, <code>client_secret<\/code>), duke paraqitur lejen e autorizimit nga p\u00ebrdoruesi (<code>username<\/code>, <code>password<\/code>) dhe duke dh\u00ebn\u00eb <code>grant_type<\/code> dhe <code>scope<\/code>. M\u00eb pas serveri i autorizimit verifikon autenticitetin e klientit dhe kredencialet e pronarit t\u00eb burimit (login-in dhe fjal\u00ebkalimin). <\/p>\n<p><\/p>\n<blockquote><p>Protokolli OAuth 2.0 kryen autentikimin jo vet\u00ebm t\u00eb p\u00ebrdoruesit, por edhe t\u00eb aplikacionit klient q\u00eb po qaset n\u00eb burime. P\u00ebr k\u00ebt\u00eb, protokolli parashikon parametra t\u00eb till\u00eb si <strong>client_id<\/strong> dhe <strong>client_secret<\/strong>.<br \/>\n<strong>\u0441lient_id<\/strong> \u2014 \u00ebsht\u00eb identifikuesi i aplikacionit klient, i p\u00ebrdorur <code>IdentityServer4<\/code> p\u00ebr t\u00eb gjetur informacion rreth klientit.<br \/>\n<strong>client_secret<\/strong> \u00ebsht\u00eb analog i fjal\u00ebkalimit p\u00ebr aplikacionin klient dhe p\u00ebrdoret p\u00ebr autentikimin e aplikacionit klient n\u00eb <code>IdentityServer4<\/code>. <strong>Sekreti i klientit duhet t\u00eb njihet vet\u00ebm nga aplikacioni dhe API<\/strong>. Nga sa u tha m\u00eb sip\u00ebr, arrijm\u00eb n\u00eb p\u00ebrfundimin se <strong>IdentityServer4 duhet t\u2019i njoh\u00eb klient\u00ebt e vet<\/strong>.<\/p><\/blockquote>\n<p>\n<\/li>\n<li>\n<p>N\u00ebse autenticiteti i aplikacionit \u00ebsht\u00eb konfirmuar dhe leja e autorizimit \u00ebsht\u00eb e vlefshme, <code>IdentiryServer4<\/code> krijon <code>access-token<\/code> (token aksesi) p\u00ebr aplikacionin dhe nj\u00eb \u00e7el\u00ebs rifreskimi opsional (<code>refresh-token<\/code>). Procesi i autorizimit ka p\u00ebrfunduar. N\u00ebse k\u00ebrkesa \u00ebsht\u00eb e pavlefshme ose e paautorizuar, at\u00ebher\u00eb serveri i autorizimit kthen nj\u00eb kod me mesazhin p\u00ebrkat\u00ebs t\u00eb gabimit.<\/p>\n<p>\n<\/li>\n<li>\n<p>Aplikacioni klient k\u00ebrkon t\u00eb dh\u00ebna nga Web API i mbrojtur, duke paraqitur tokenin e aksesit p\u00ebr autorizim. N\u00ebse kodi i p\u00ebrgjigjes s\u00eb serverit t\u00eb burimeve \u00ebsht\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%BA%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D1%8F_HTTP#401\">401<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%BA%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D1%8F_HTTP#403\">403<\/a><\/noindex> ose <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/List_of_HTTP_status_codes\">498<\/a><\/noindex>, at\u00ebher\u00eb tokeni i aksesit i p\u00ebrdorur p\u00ebr autentikim \u00ebsht\u00eb i pavlefsh\u00ebm ose ka skaduar.<\/p>\n<p>\n<\/li>\n<li>\n<p>N\u00ebse tokeni \u00ebsht\u00eb i vlefsh\u00ebm, <code>Web API<\/code> i jep t\u00eb dh\u00ebnat aplikacionit.<\/p>\n<p>\n<\/li>\n<\/ol>\n<p><\/p>\n<h4 id=\"_tipy-tokenov_\"><em>Llojet e token\u00ebve<\/em><\/h4>\n<p><\/p>\n<p>Klient\u00ebve t\u00eb regjistruar n\u00eb <code>IdentityServer4<\/code> u lejohet t\u00eb k\u00ebrkojn\u00eb nga <code>IdentityServer4<\/code> <code>identity<\/code>-token, <code>access<\/code>-token dhe <code>refresh<\/code>-token.<\/p>\n<p><\/p>\n<ul>\n<li><strong>identity-token (token identifikimi)<\/strong> \u2014 rezultati i procesit t\u00eb autentikimit. P\u00ebrmban identifikuesin e p\u00ebrdoruesit dhe informacion se si dhe kur p\u00ebrdoruesi kalon autentikimin. Mund t\u00eb zgjerohet me t\u00eb dh\u00ebnat tuaja.<\/li>\n<li><strong>access-token (token aksesi)<\/strong> \u2014 i d\u00ebrgohet API-s\u00eb s\u00eb mbrojtur dhe p\u00ebrdoret prej saj p\u00ebr autorizim (lejim aksesi) n\u00eb t\u00eb dh\u00ebnat e veta.<\/li>\n<li><strong>refresh-token (token rifreskimi)<\/strong> \u2014 nj\u00eb paramet\u00ebr opsional q\u00eb serveri i autorizimit mund ta kthej\u00eb si p\u00ebrgjigje ndaj k\u00ebrkes\u00ebs p\u00ebr token aksesi.<\/li>\n<\/ul>\n<p><\/p>\n<p>Le t\u00eb prezantojm\u00eb edhe dy koncepte t\u00eb tjera:<\/p>\n<p><\/p>\n<p><strong>Authenticatation Server Url<\/strong> \u2014 pika fundore p\u00ebr marrjen e \u00e7el\u00ebsit t\u00eb aksesit. T\u00eb gjitha k\u00ebrkesat p\u00ebr l\u00ebshimin dhe rinovimin e \u00e7el\u00ebsave t\u00eb aksesit do t\u2019i d\u00ebrgojm\u00eb n\u00eb k\u00ebt\u00eb URL.<\/p>\n<p><\/p>\n<p><strong>Resource Url<\/strong> \u2014 URL-ja e burimit t\u00eb mbrojtur, t\u00eb cil\u00ebn duhet ta p\u00ebrdorni p\u00ebr t\u00eb marr\u00eb akses n\u00eb t\u00eb, duke i d\u00ebrguar \u00e7el\u00ebsin e aksesit n\u00eb header-in e autorizimit.<\/p>\n<p><\/p>\n<h4 id=\"_zapros-klyucha-dostupa_\"><em>K\u00ebrkesa p\u00ebr \u00e7el\u00ebsin e aksesit<\/em><\/h4>\n<p><\/p>\n<p>P\u00ebr t\u00eb k\u00ebrkuar \u00e7el\u00ebsin e aksesit, klienti b\u00ebn <code>POST<\/code> k\u00ebrkes\u00eb n\u00eb pik\u00ebn fundore <code>IdentityServer4<\/code> me header-in e m\u00ebposht\u00ebm<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">'Content-Type': 'application\/x-www-form-urlencoded',\n'Accept': 'application\/json',\n'Expect': '100-continue'<\/code><\/pre>\n<p><\/p>\n<p>dhe duke kaluar parametrat e m\u00ebposht\u00ebm:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">'grant_type' : 'password',\n'username' : login,\n'password' : password,\n'scope' : 'scope',\n'client_id' : 'client_id',\n'client_secret' : '{client_secret}'<\/code><\/pre>\n<p><\/p>\n<p><code>username<\/code>, <code>password<\/code>, <code>client_id<\/code> dhe <code>client_secret<\/code> jan\u00eb shqyrtuar m\u00eb sip\u00ebr. Le t\u00eb shqyrtojm\u00eb parametrat e tjer\u00eb:<\/p>\n<p><\/p>\n<p><strong>grant_type<\/strong> \u2014 lloji i grantit ose lloji i autorizimit. Lloji i autorizimit varet nga metoda q\u00eb aplikacioni p\u00ebrdor p\u00ebr t\u00eb k\u00ebrkuar autorizim, si edhe nga llojet e autorizimit q\u00eb mb\u00ebshteten nga API. N\u00eb rastin ton\u00eb ai do t\u00eb ket\u00eb vler\u00ebn <code>password<\/code>, e cila sipas specifikimit <code>OAuth 2.0<\/code> i korrespondon grantit me kredencialet e pronarit t\u00eb burimit (autorizim me hyrje dhe fjal\u00ebkalim).<\/p>\n<p><\/p>\n<p>Protokolli <code>OAuth 2.0<\/code> p\u00ebrcakton llojet e m\u00ebposhtme t\u00eb granteve q\u00eb k\u00ebrkojn\u00eb <strong>nd\u00ebrveprim t\u00eb detyruesh\u00ebm me p\u00ebrdoruesin<\/strong>:<\/p>\n<p><\/p>\n<ul>\n<li><strong>kodi i autorizimit (authorization code)<\/strong>. \u00cbsht\u00eb nj\u00eb nga llojet m\u00eb t\u00eb zakonshme t\u00eb autorizimit, pasi p\u00ebrshtatet mir\u00eb p\u00ebr aplikacionet server-side, ku kodi burimor i aplikacionit dhe sekreti i klientit nuk jan\u00eb t\u00eb qassh\u00ebm p\u00ebr pal\u00eb t\u00eb treta;<\/li>\n<li><strong>i n\u00ebnkuptuar (implicit)<\/strong>. Lloji i n\u00ebnkuptuar i autorizimit p\u00ebrdoret nga aplikacionet mobile dhe web, ku konfidencialiteti i sekretit t\u00eb klientit nuk mund t\u00eb garantohet;<\/li>\n<\/ul>\n<p><\/p>\n<p>Dhe llojet e granteve q\u00eb <strong>mund t\u00eb ekzekutohen pa nd\u00ebrveprim interaktiv me p\u00ebrdoruesin<\/strong>:<\/p>\n<p><\/p>\n<ul>\n<li><strong>kredencialet e pronarit t\u00eb burimit (resource owner)<\/strong>. Ky lloj autorizimi duhet t\u00eb p\u00ebrdoret vet\u00ebm kur aplikacioni klient g\u00ebzon besimin e p\u00ebrdoruesit dhe p\u00ebrdoruesi nuk ka shqet\u00ebsim t\u00eb fus\u00eb hyrjen dhe fjal\u00ebkalimin e tij. Ky lloj autorizimi duhet t\u00eb p\u00ebrdoret vet\u00ebm kur opsionet e tjera nuk jan\u00eb t\u00eb disponueshme. Ky lloj autorizimi \u00ebsht\u00eb i p\u00ebrshtatsh\u00ebm p\u00ebr klient\u00ebt korporativ\u00eb q\u00eb tashm\u00eb kan\u00eb p\u00ebrdorur kredencialet e p\u00ebrdoruesit brenda sistemit t\u00eb tyre dhe duan t\u00eb kalojn\u00eb n\u00eb <code>OAuth 2.0<\/code>.<\/li>\n<li><strong>kredencialet e klientit<\/strong>. P\u00ebrdoren kur aplikacioni hyn n\u00eb API. Kjo mund t\u00eb jet\u00eb e dobishme, p\u00ebr shembull, kur aplikacioni d\u00ebshiron t\u00eb p\u00ebrdit\u00ebsoj\u00eb informacionin e vet t\u00eb regjistrimit n\u00eb sh\u00ebrbim ose URI-n\u00eb e ridrejtimit, ose t\u00eb ket\u00eb qasje n\u00eb informacione t\u00eb tjera t\u00eb ruajtura n\u00eb llogarin\u00eb e aplikacionit n\u00eb sh\u00ebrbim p\u00ebrmes API-s\u00eb s\u00eb sh\u00ebrbimit.<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>scope<\/strong> \u2014 \u00ebsht\u00eb nj\u00eb paramet\u00ebr opsional. Ai p\u00ebrcakton fush\u00ebn e veprimit. Token-i i aksesit i kthyer nga serveri do t\u00eb jap\u00eb qasje vet\u00ebm te sh\u00ebrbimet q\u00eb p\u00ebrfshihen n\u00eb k\u00ebt\u00eb scope. Pra, mund t\u00eb bashkojm\u00eb disa sh\u00ebrbime n\u00ebn nj\u00eb scope t\u00eb vet\u00ebm dhe, n\u00ebse klienti merr nj\u00eb \u00e7el\u00ebs aksesi p\u00ebr k\u00ebt\u00eb scope, ai fiton qasje n\u00eb t\u00eb gjitha k\u00ebto sh\u00ebrbime. Scope mund t\u00eb p\u00ebrdoret gjithashtu p\u00ebr t\u00eb kufizuar t\u00eb drejtat e autorizimit (p\u00ebr shembull, qasje vet\u00ebm p\u00ebr lexim ose p\u00ebr shkrim)<\/p>\n<p>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/489354\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u042d\u0442\u0438\u043c \u043f\u043e\u0441\u0442\u043e\u043c \u044f \u0445\u043e\u0447\u0443 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0432\u0435\u0442\u043a\u0443 \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u0443\u044e IdentityServer4. \u041d\u0430\u0447\u043d\u0435\u043c \u043c\u044b \u0441 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043f\u043e\u043d\u044f\u0442\u0438\u0439. \u0421\u0430\u043c\u044b\u043c \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u043c \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f OpenID Connect, \u0430 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u043c \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 (\u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430) \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f OAuth 2.0. IdentityServer4 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u044d\u0442\u0438 \u0434\u0432\u0430 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430. \u041e\u043d \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438. OpenID Connect \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u043e\u043d \u043d\u0435 \u0434\u0430\u0435\u0442 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":71308,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-71307","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u042d\u0442\u0438\u043c \u043f\u043e\u0441\u0442\u043e\u043c \u044f \u0445\u043e\u0447\u0443 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0432\u0435\u0442\u043a\u0443 \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u0443\u044e IdentityServer4.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/identityserver4-osnovnye-ponyatiya-openid-connect-oauth-2-0-i-jwt\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47IdentityServer4. \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u043e\u043d\u044f\u0442\u0438\u044f. OpenID Connect, OAuth 2.0 \u0438 JWT | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u042d\u0442\u0438\u043c \u043f\u043e\u0441\u0442\u043e\u043c \u044f \u0445\u043e\u0447\u0443 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0432\u0435\u0442\u043a\u0443 \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u0443\u044e IdentityServer4.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/identityserver4-osnovnye-ponyatiya-openid-connect-oauth-2-0-i-jwt\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-02-24T19:18:55+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-03T13:14:27+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47IdentityServer4. Konceptet baz\u00eb. OpenID Connect, OAuth 2.0 dhe JWT | ProHoster","description":"Me k\u00ebt\u00eb postim dua t\u00eb hap nj\u00eb seri artikujsh kushtuar IdentityServer4.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/identityserver4-osnovnye-ponyatiya-openid-connect-oauth-2-0-i-jwt","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47IdentityServer4. \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u043e\u043d\u044f\u0442\u0438\u044f. OpenID Connect, OAuth 2.0 \u0438 JWT | ProHoster","og:description":"\u042d\u0442\u0438\u043c \u043f\u043e\u0441\u0442\u043e\u043c \u044f \u0445\u043e\u0447\u0443 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0432\u0435\u0442\u043a\u0443 \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u0443\u044e IdentityServer4.","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/identityserver4-osnovnye-ponyatiya-openid-connect-oauth-2-0-i-jwt","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-02-24T19:18:55+00:00","article:modified_time":"2020-03-03T13:14:27+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"71307","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 19:04:25","updated":"2022-09-27 22:46:39","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/71307","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=71307"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/71307\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/71308"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=71307"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=71307"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=71307"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}