{"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\/it\/blog\/administrirovanie\/identityserver4-osnovnye-ponyatiya-openid-connect-oauth-2-0-i-jwt","title":{"rendered":"IdentityServer4. Concetti di base. OpenID Connect, OAuth 2.0 e JWT","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Con questo post voglio aprire una serie di articoli dedicati a IdentityServer4. Iniziamo con i concetti di base.<\/p>\n<p><\/p>\n<p>Attualmente, il protocollo di autenticazione pi\u00f9 promettente \u00e8 <noindex><a rel=\"nofollow\" href=\"https:\/\/openid.net\/connect\/\">OpenID Connect<\/a><\/noindex>, mentre il protocollo di autorizzazione (per concessione di accesso) \u00e8 <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> implementa questi due protocolli. \u00c8 ottimizzato per risolvere <strong>problemi tipici<\/strong> di sicurezza.<\/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 \u00e8 un protocollo e uno standard di autenticazione, non fornisce accesso alle risorse (Web API), ma poich\u00e9 \u00e8 stato sviluppato sopra il protocollo di autorizzazione <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/OAuth#OAuth_2.0\">OAuth 2.0<\/a><\/noindex>, consente di ottenere i parametri del profilo utente come se si fosse ottenuto accesso alla risorsa <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) \u00e8 uno standard web che definisce il modo di trasmettere i dati dell'utente in formato JSON in modo crittografato.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/tools.ietf.org\/html\/rfc6749\">OAuth 2.0 (RFC 6749)<\/a><\/noindex> \u2014 \u00e8 un protocollo e uno standard di autorizzazione. Permette alle applicazioni di accedere a risorse protette, come le Web API.<\/p><\/blockquote>\n<p>Esaminiamo il diagramma di accesso a una risorsa protetta e compiamo i principali passaggi e la terminologia accettata:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"IdentityServer4. Concetti di base. OpenID Connect, OAuth 2.0 e 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>Il client richiede all'utente il permesso di eseguire l'autenticazione per suo conto. <strong>Cliente<\/strong> \u2014 \u00e8 un'applicazione client che accede alle risorse protette a nome del proprietario delle risorse. <strong>La risorsa<\/strong> \u2014 sono tutti i nostri servizi protetti <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>L'utente consente all'applicazione client di eseguire l'autenticazione per suo conto, ad esempio inserendo nome utente e password. Il nome utente e la password fungeranno da concessione di autorizzazione per l'applicazione client. <strong>Utente (proprietario della risorsa)<\/strong> \u2014 \u00e8 il programma o l'individuo che pu\u00f2 concedere accesso a risorse protette, ad esempio, tramite l'inserimento del nome utente (username) e della password (password);<\/p>\n<p>\n<\/li>\n<li>\n<p>L'applicazione client richiede un token di accesso a <code>IdentityServer4<\/code> fornendo informazioni su se stessa (<code>client_id<\/code>, <code>client_secret<\/code>), concedendo l'autorizzazione per l'autenticazione da parte dell'utente (<code>username<\/code>, <code>password<\/code>) e fornendo <code>grant_type<\/code> e <code>scope<\/code>. Poi il server di autorizzazione verifica l'autenticit\u00e0 del client e le credenziali del proprietario della risorsa (nome utente e password). <\/p>\n<p><\/p>\n<blockquote><p>Il protocollo OAuth 2.0 esegue l'autenticazione non solo dell'utente, ma anche dell'applicazione client che accede alle risorse. A tal fine, il protocollo prevede parametri come <strong>client_id<\/strong> e <strong>client_secret<\/strong>.<br \/>\n<strong>client_id<\/strong> \u2014 \u00e8 l'identificativo dell'applicazione client, utilizzato <code>IdentityServer4<\/code> per cercare informazioni sul client.<br \/>\n<strong>client_secret<\/strong> \u00e8 l'equivalente della password per l'applicazione client e viene utilizzato per l'autenticazione dell'applicazione client su <code>IdentityServer4<\/code>. <strong>Il segreto del cliente deve essere conosciuto solo dall'applicazione e dall'API<\/strong>. Da quanto detto in precedenza, possiamo concludere che <strong>IdentityServer4 deve sapere dei suoi clienti<\/strong>.<\/p><\/blockquote>\n<p>\n<\/li>\n<li>\n<p>Se l'autenticit\u00e0 dell'applicazione \u00e8 confermata e il permesso per l'autorizzazione \u00e8 valido, <code>IdentiryServer4<\/code> crea <code>access-token<\/code> (token di accesso) per l'applicazione e un optional refresh token (<code>refresh-token<\/code>). Il processo di autorizzazione \u00e8 completato. Se la richiesta \u00e8 invalida o non autorizzata, il server di autorizzazione restituisce un codice con il relativo messaggio di errore.<\/p>\n<p>\n<\/li>\n<li>\n<p>L'applicazione client richiede dati da un API Web protetta, fornendo nel contempo il token di accesso per l'autorizzazione. Se il codice di risposta del server delle risorse <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> o <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/List_of_HTTP_status_codes\">498<\/a><\/noindex>, allora il token di accesso utilizzato per l'autenticazione \u00e8 non valido o scaduto.<\/p>\n<p>\n<\/li>\n<li>\n<p>Se il token \u00e8 valido, <code>Web API<\/code> fornisce i dati all'applicazione.<\/p>\n<p>\n<\/li>\n<\/ol>\n<p><\/p>\n<h4 id=\"_tipy-tokenov_\"><em>Tipi di token<\/em><\/h4>\n<p><\/p>\n<p>I clienti registrati in <code>IdentityServer4<\/code> possono richiedere <code>IdentityServer4<\/code> <code>identity<\/code>-token, <code>access<\/code>-token e <code>aggiorna<\/code>-token.<\/p>\n<p><\/p>\n<ul>\n<li><strong>identity-token (token di identit\u00e0)<\/strong> \u2014 \u00e8 il risultato del processo di autenticazione. Contiene l'identificativo dell'utente e informazioni su come e quando l'utente completa l'autenticazione. Pu\u00f2 essere esteso con i propri dati.<\/li>\n<li><strong>access-token (token di accesso)<\/strong> \u2014 viene passato all'API protetta e utilizzato per l'autorizzazione (permesso di accesso) ai propri dati.<\/li>\n<li><strong>refresh-token (token di aggiornamento)<\/strong> \u2014 \u00e8 un parametro opzionale che il server di autorizzazione pu\u00f2 restituire in risposta alla richiesta di un token di accesso.<\/li>\n<\/ul>\n<p><\/p>\n<p>Introduciamo altri due concetti:<\/p>\n<p><\/p>\n<p><strong>Authenticatation Server Url<\/strong> \u2014 \u00e8 l'endpoint per ottenere il token di accesso. Tutte le richieste per l'emissione e il rinnovo dei token di accesso verranno indirizzate a questo URL.<\/p>\n<p><\/p>\n<p><strong>Resource Url<\/strong> \u2014 \u00e8 l'URL della risorsa protetta alla quale bisogna accedere, passando il token di accesso nell'intestazione di autorizzazione.<\/p>\n<p><\/p>\n<h4 id=\"_zapros-klyucha-dostupa_\"><em>Richiesta di token di accesso<\/em><\/h4>\n<p><\/p>\n<p>Per richiedere il token di accesso, il client effettua <code>POST<\/code> una richiesta all'endpoint <code>IdentityServer4<\/code> con il seguente header<\/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>e passando i seguenti parametri:<\/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> e <code>client_secret<\/code> sono stati discussi sopra. Analizziamo gli altri parametri:<\/p>\n<p><\/p>\n<p><strong>grant_type<\/strong> \u2014 tipo di grant o tipo di autorizzazione. Il tipo di autorizzazione dipende dal metodo di richiesta di autorizzazione utilizzato dall'applicazione e dai tipi di autorizzazione supportati dall'API. Nel nostro caso avr\u00e0 il valore <code>password<\/code>, che secondo la specifica <code>OAuth 2.0<\/code> corrisponde al grant delle credenziali di accesso del proprietario della risorsa (autorizzazione tramite nome utente e password).<\/p>\n<p><\/p>\n<p>Protocollo <code>OAuth 2.0<\/code> definisce i seguenti tipi di grant che richiedono <strong>l'interazione obbligatoria con gli utenti<\/strong>:<\/p>\n<p><\/p>\n<ul>\n<li><strong>codice di autorizzazione (authorization code)<\/strong>. \u00c8 uno dei tipi di autorizzazione pi\u00f9 comuni, poich\u00e9 si adatta bene alle applicazioni server-side, dove il codice sorgente dell'applicazione e il segreto del client non sono accessibili a terzi;<\/li>\n<li><strong>implicito (implicit)<\/strong>. Il tipo di autorizzazione implicito \u00e8 utilizzato da applicazioni mobili e web, dove la riservatezza del segreto del client non pu\u00f2 essere garantita;<\/li>\n<\/ul>\n<p><\/p>\n<p>E i tipi di grant che <strong>possono essere eseguiti senza interazione interattiva con gli utenti<\/strong>:<\/p>\n<p><\/p>\n<ul>\n<li><strong>credenziali del proprietario della risorsa (resource owner)<\/strong>. Questo tipo di autorizzazione deve essere utilizzato solo quando l'applicazione client gode della fiducia dell'utente e l'utente \u00e8 a proprio agio nell'inserire il proprio nome utente e la propria password. Questo tipo di autorizzazione dovrebbe essere utilizzato solo quando non ci sono altre opzioni disponibili. Questo tipo di autorizzazione \u00e8 comodo per i clienti aziendali che all'interno del loro sistema hanno gi\u00e0 utilizzato le credenziali dell'utente e desiderano passare a <code>OAuth 2.0<\/code>.<\/li>\n<li><strong>credenziali del client<\/strong>. Sono utilizzate quando l'applicazione accede all'API. Questo pu\u00f2 essere utile, ad esempio, quando l'applicazione desidera aggiornare le proprie informazioni di registrazione sul servizio o l'URI di reindirizzamento, oppure accedere ad altre informazioni memorizzate nell'account dell'applicazione sul servizio, tramite l'API del servizio.<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>scope<\/strong> \u2014 \u00e8 un parametro facoltativo. Definisce l'ambito di visibilit\u00e0. Il token di accesso restituito dal server garantir\u00e0 l'accesso solo ai servizi che rientrano in questo ambito. In altre parole, possiamo raggruppare diversi servizi sotto un unico scope e se il cliente riceve una chiave di accesso per questo scope, ottiene accesso a tutti questi servizi. Inoltre, lo scope pu\u00f2 essere utilizzato per limitare i diritti di autorizzazione (ad esempio, accesso in lettura o scrittura).<\/p>\n<p>Fonte: <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.1.1 - 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\/it\/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.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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\/it\/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. Concetti fondamentali. OpenID Connect, OAuth 2.0 e JWT | ProHoster","description":"Con questo post voglio aprire un'infilata di articoli dedicati a IdentityServer4.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/identityserver4-osnovnye-ponyatiya-openid-connect-oauth-2-0-i-jwt","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/71307","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=71307"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/71307\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/71308"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=71307"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=71307"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=71307"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}