{"id":1747,"date":"2020-09-18T11:55:48","date_gmt":"2020-09-18T09:55:48","guid":{"rendered":"https:\/\/blog.besharp.it\/?p=1747"},"modified":"2022-09-07T12:30:15","modified_gmt":"2022-09-07T10:30:15","slug":"costruiamo-un-sistema-di-autenticazione-macchina-macchina-con-amazon-cognito","status":"publish","type":"post","link":"https:\/\/blog.besharp.it\/it\/costruiamo-un-sistema-di-autenticazione-macchina-macchina-con-amazon-cognito\/","title":{"rendered":"Costruiamo un sistema di autenticazione macchina-macchina con Amazon Cognito"},"content":{"rendered":"\n
\n

Sempre pi\u00f9 applicazioni, sia mobile che web, si affidano a servizi gestiti come Amazon Cognito per l’autenticazione e l’autorizzazione degli utenti. Cognito consente di sviluppare rapidamente applicazioni sicure, in linea con standard di sicurezza robusti ed affermati per l’autenticazione e l’autorizzazione degli utenti finali.<\/p>\n\n\n\n

Sfruttare un servizio completamente gestito consente agli sviluppatori di smettere di preoccuparsi del flusso di autenticazione e della gestione del pool di utenti, lasciandoli liberi di concentrarsi su ci\u00f2 che conta: la logica di business dei prodotti.<\/p>\n\n\n\n

A volte \u00e8 anche necessario implementare sistemi di autenticazione per consentire a servizi di terze parti di consumare API esposte dai servizi in sviluppo.<\/p>\n\n\n\n

Sebbene Cognito sia utilizzato principalmente per i flussi di autenticazione degli utenti, pu\u00f2 anche essere utilizzato per creare un sistema di autenticazione da macchina a macchina.<\/p>\n\n\n\n

In questo articolo descriveremo come Amazon Cognito pu\u00f2 essere utilizzato per autenticare un sistema client che necessita dell’accesso a un set di API sensibili esposte dal nostro servizio.<\/p>\n\n\n\n

Prima di approfondire la descrizione della soluzione, descriviamo i servizi coinvolti.<\/p>\n\n\n\n

Cos’\u00e8 Amazon Cognito?<\/h2>\n\n\n\n

Quando \u00e8 necessario implementare un sistema di autorizzazione e autenticazione su AWS, Amazon Cognito \u00e8 sicuramente la scelta migliore.<\/p>\n\n\n\n

Amazon Cognito consente di implementare un sistema di login – completo di verifica email e gestione della password – all\u2019interno di applicazioni web e mobile in modo rapido e semplice. \u00e8 in grado di gestire milioni di utenti e supporta l’accesso con Identity Provider social, come Facebook, Google e Amazon, cos\u00ec come Identity Provider aziendali tramite SAML 2.0.<\/p>\n\n\n\n

Inoltre Cognito supporta anche l’autenticazione a pi\u00f9 fattori e la crittografia dei dati at rest e in transito. Amazon Cognito \u00e8 idoneo HIPAA e conforme a PCI DSS, SOC, ISO \/ IEC 27001, ISO \/ IEC 27017, ISO \/ IEC 27018 e ISO 9001.<\/p>\n\n\n\n

Passiamo ora a descrivere i principali concetti di Cognito.<\/p>\n\n\n\n

Gli utenti sono gestiti tramite due tipi di pool, il centro del funzionamento di Amazon Cognito: User Pool e Identity Pool.<\/p>\n\n\n\n

User Pool<\/h2>\n\n\n\n

Uno User Pool (o pool di utenti) \u00e8 essenzialmente una user directory che consente di archiviare in modo sicuro gli attributi del profilo degli utenti. Permette di fare off loading completo della manutenzione, della sicurezza e della disponibilit\u00e0 della user directory. Tra le operazioni che possono essere esternalizzate ci sono sicuramente la memorizzazione sicura dei dati degli utenti, la verifica dei numeri di telefono e \/o degli indirizzi di posta elettronica, la gestione delle API del sistema di login, del flusso di registrazione, login, logout e la reimpostazione della password.<\/p>\n\n\n\n

Oltre a utilizzare le API specifiche di Amazon Cognito per il flusso di autenticazione degli utenti, il servizio supporta anche il protocollo OAuth 2.0.<\/p>\n\n\n\n

I pool di utenti sono una componente fondamentale di qualsiasi sistema di autenticazione basato su Amazon Cognito e ci torneranno utili per creare il nostro sistema di autenticazione machine-to-machine.<\/p>\n\n\n\n

Identity Pool<\/h2>\n\n\n\n

Nell\u2019esempio che abbiamo preso in considerazione per questo articolo non sar\u00e0 necessario utilizzare gli Identity Pool, ma \u00e8 comunque utile descriverne brevemente il funzionamento.<\/p>\n\n\n\n

Gli Identity Pool (o pool di identit\u00e0) vengono utilizzati da Cognito per mantenere organizzate le identit\u00e0 federate. Un pool di identit\u00e0 associa identit\u00e0 federate da Identity Provider esterni, o anche da una User Pool, a un identificatore univoco. I pool di identit\u00e0 non memorizzano i profili utente, ma solo i loro ID univoci, che vengono generati e gestiti da Cognito. Mediante gli ID \u00e8 possibile assegnare agli utenti corrispondenti un set di credenziali IAM temporanee con privilegi limitati. Gli utenti o le applicazioni client possono utilizzare queste credenziali per accedere alle risorse AWS. Le regole di autorizzazione per ogni utente sono controllate tramite ruoli e policy AWS IAM personalizzabili. \u00c8 anche possibile definire regole per abbinare gli utenti al ruolo desiderato. <\/p>\n\n\n\n

Ora che abbiamo definito tutti i concetti fondamentali possiamo passare alla parte centrale del nostro articolo.<\/p>\n\n\n\n

Flusso di autenticazione \u201cmachine-to-machine\u201d<\/h2>\n\n\n\n

Iniziamo definendo il flusso di autenticazione che configureremo nei passaggi successivi. <\/p>\n<\/div><\/div>\n\n\n

\n
\"\"<\/figure><\/div>\n\n\n

Come descritto nelle specifiche OAuth 2.0, possiamo autenticare un client che presenta un ID client e un client secret validi al nostro Identity Provider. <\/p>\n\n\n\n

Come si pu\u00f2 vedere nello schema, un client generico pu\u00f2 chiamare le API di AWS Cognito con il client ID e il segreto condivisi con lo stesso. Se i due parametri sono validi, AWS Cognito restituisce un token di accesso. Da questo momento, l\u2019applicazione di terze parti pu\u00f2 effettuare chiamate autenticate mediante l\u2019access token rilasciato da Cognito.<\/p>\n\n\n\n

Ci\u00f2 che va implementato lato servizi \u00e8 la convalida del token JWT come descritto dalla specifica OAuth 2.0. Occorre.<\/p>\n\n\n\n

  1. Convalidare che il JWT ricevuto abbia un formato valido.<\/li>
  2. Convalidare la firma JWT.<\/li>
  3. Verifica tutti i claim.<\/li><\/ol>\n\n\n\n

    Passiamo ora a configurare il flusso descritto all’interno del nostro account AWS.<\/p>\n\n\n\n

    Hands-on!<\/h1>\n\n\n\n

    Ora che abbiamo descritto le principali funzioni di Amazon Cognito possiamo iniziare con il progetto. Prima di tutto, creiamo una User Pool dalla console AWS. Scegliamo un nome esplicativo e manteniamo tutte le impostazioni predefinite facendo clic sul pulsante “Review defaults”.<\/p>\n\n\n\n

    \"create<\/figure>\n\n\n\n

    A questo punto possiamo iniziare ad esplorare le numerose opzioni fornite dal nostro nuovo pool di utenti, modificando quelle necessarie per il nostro progetto.<\/p>\n\n\n\n

    Il server o servizio che erogher\u00e0 le API da autenticare pu\u00f2 essere specificato nella pagina \u201cresource server\u201d nelle opzioni della User Pool.<\/p>\n\n\n\n

    Qui sarai in grado di determinare l’URL univoco del server che espone le API che devi proteggere. Inoltre, in questa pagina \u00e8 possibile elencare una serie di scopes per discriminare, ad esempio, vari livelli di accesso al servizio.<\/p>\n\n\n\n

    \"set<\/figure>\n\n\n\n

    Ora che il server di risorse \u00e8 stato configurato, possiamo occuparci delle impostazioni dei client dell’app.<\/p>\n\n\n\n

    In questa pagina \u00e8 possibile definire un nuovo client, ad esempio una nuova web-app, che deve consumare il set di API che si desidera proteggere.<\/p>\n\n\n

    \n
    \"app<\/figure><\/div>\n\n\n

    Specifichiamo il nome del nuovo client e la scadenza dei token di sicurezza utilizzati nel processo di autorizzazione. A causa delle specifiche OAuth2 non esiste un meccanismo di refresh del token, per cui \u00e8 possibile solamente indicarne la scadenza. Quando il token non sar\u00e0 pi\u00f9 valido, occorrer\u00e0 ripetere il flusso di autenticazione per ottenerne uno nuovo. <\/p>\n\n\n\n

    Salvando questi dettagli, Cognito ci chieder\u00e0 un client app ID e un segreto. Sebbene l’ID sia inteso come identificativo pubblico delle app, \u00e8 importante non condividere mai n\u00e9 l’ID n\u00e9 il segreto per motivi di sicurezza.<\/p>\n\n\n\n

    Questi due token devono essere crittografati e archiviati da ciascuna delle applicazioni registrate per richiedere i token di accesso al pool di utenti Cognito. Sono essenzialmente il nome utente e la password dell’autorizzazione da sistema a sistema.<\/p>\n\n\n\n

    La tua app \u00e8 ora registrata correttamente ed \u00e8 possibile modificare le opzioni di autorizzazione che desideri abilitare per i suoi utenti dalla pagina di impostazioni.<\/strong><\/p>\n\n\n\n

    Da questa pagina, puoi anche definire quali scope possono essere utilizzati da ogni client dell’app.<\/p>\n\n\n\n

    \"scope<\/figure>\n\n\n\n

    Come passaggio finale sulla console Cognito, \u00e8 necessario scegliere un nome di dominio. In questa pagina, infatti, sceglieremo (se disponibile) dove le applicazioni invieranno le richieste di token di accesso.<\/p>\n\n\n\n

    \"choose<\/figure>\n\n\n\n

    Cognito \u00e8 ora correttamente configurato.<\/p>\n\n\n\n

    import requests\n \nTOKEN_ENDPOINT = 'https:\/\/system-to-system.auth.eu-west-1.amazoncognito.com\/oauth2\/token'\n \nbody = {\n    'grant_type': 'client_credentials',\n    'client_id': CLIENT_ID,\n    'client_secret': CLIENT_SECRET,\n    'scope': 'https:\/\/my-api-server.org\/api.readwrite'\n}\n \nresponse = requests.post(TOKEN_ENDPOINT, data=body)\nprint(response.text)\n \n<\/pre>\n\n\n\n

    Come si evince dallo snippet sopra, il recupero del token di accesso \u00e8 una richiesta HTTP POST abbastanza semplice che necessita nel suo corpo dei pochi semplici parametri visti prima. L\u2019endpoint \u00e8 composto usando il dominio specificato nelle impostazioni di Cognito.<\/p>\n\n\n\n

    Il token di accesso che abbiamo appena ricevuto \u00e8 pronto per essere spedito all’interno di una chiamata API al server che eroga le API autenticate. Quest’ultimo, quindi, deve essere in grado di decodificarlo e convalidarlo.<\/p>\n\n\n\n

    import functools\nimport json\nimport jwt\nimport urllib.request\ndef is_valid_token(scope) -> bool:\n    def wrapped(func):\n        @functools.wraps(func)\n        def wrapper(access_token):\n            public_keys = get_well_known_jwk(REGION, USER_POOL_ID)\n            kid = jwt.get_unverified_header(access_token)['kid']\n            key = public_keys[kid]\n            payload = jwt.decode(access_token, key=key, algorithms=['RS256'])\n            if payload['client_id'] != CLIENT_ID:\n                print('Wrong client_id')\n                raise Exception('Wrong client id')\n            if payload['scope'] != scope:\n                print('Wrong scope')\n                raise Exception('Wrong scope')\n            return func(access_token)\n        return wrapper\n    return wrapped\ndef get_well_known_jwk(region: str, user_pool_id: str) -> dict:\n    jwk_url = f\"https:\/\/cognito-idp.{region}.amazonaws.com\/{user_pool_id}\/.well-known\/jwks.json\"\n    with urllib.request.urlopen(jwk_url) as url:\n        jwks = json.loads(url.read().decode())\n    public_keys = {}\n    for jwk in jwks['keys']:\n        kid = jwk['kid']\n        public_keys[kid] = jwt.algorithms.RSAAlgorithm.from_jwk(json.dumps(jwk))\n    return public_keys\n@is_valid_token(scope = 'https:\/\/my-api-server.org\/api.write')\ndef api(access_token):\n    resp = {\n        \"status_code\": 200,\n        \"body\": \"This is your body.\"\n    }\n    print(json.dumps(resp))\n<\/pre>\n\n\n\n

    \u00c8 ora possibile testare la soluzione e autenticare altri servizi della propria applicazione.<\/p>\n\n\n\n

    \u00c8 tutto per oggi! In questo articolo, abbiamo spiegato come creare un sistema di autenticazione di tipo macchina-macchina sicuro, affidabile e completamente gestito sfruttando Amazon Cognito e gli User Pool.<\/p>\n\n\n\n

    Contattateci o lasciateci un commento qui sotto per farci domande o semplicemente per aggiungere considerazioni sull\u2019argomento.<\/p>\n\n\n\n

    Ci vediamo tra 14 giorni<\/strong> per il prossimo articolo sul blog #Proud2beCloud<\/strong>!<\/p>\n","protected":false},"excerpt":{"rendered":"

    Sempre pi\u00f9 applicazioni, sia mobile che web, si affidano a servizi gestiti come Amazon Cognito per l’autenticazione e l’autorizzazione degli […]<\/p>\n","protected":false},"author":9,"featured_media":1768,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[471],"tags":[325],"yoast_head":"\nCostruiamo un sistema di autenticazione macchina-macchina con Amazon Cognito - Proud2beCloud Blog<\/title>\n<meta name=\"description\" content=\"Come creare un sistema di autenticazione di tipo macchina-macchina sicuro, affidabile e completamente gestito sfruttando Amazon Cognito e gli User Pool.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.besharp.it\/it\/costruiamo-un-sistema-di-autenticazione-macchina-macchina-con-amazon-cognito\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Costruiamo un sistema di autenticazione machine-to-machine con Amazon Cognito.\" \/>\n<meta property=\"og:description\" content=\"Creiamo un sistema di autenticazione di tipo macchina-macchina sicuro, affidabile e fully managed sfruttando Amazon Cognito.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.besharp.it\/it\/costruiamo-un-sistema-di-autenticazione-macchina-macchina-con-amazon-cognito\/\" \/>\n<meta property=\"og:site_name\" content=\"Proud2beCloud Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-09-18T09:55:48+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-07T10:30:15+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.besharp.it\/wp-content\/uploads\/2020\/09\/facebook-link-image-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Matteo Moroni\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Sistema di autenticazione macchina-macchina con Amazon Cognito.\" \/>\n<meta name=\"twitter:description\" content=\"Creiamo un sistema di autenticazione di tipo macchina-macchina sicuro, affidabile e fully managed sfruttando Amazon Cognito.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/blog.besharp.it\/wp-content\/uploads\/2020\/09\/twitter-shared-link-1.png\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Matteo Moroni\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.besharp.it\/it\/costruiamo-un-sistema-di-autenticazione-macchina-macchina-con-amazon-cognito\/\",\"url\":\"https:\/\/blog.besharp.it\/it\/costruiamo-un-sistema-di-autenticazione-macchina-macchina-con-amazon-cognito\/\",\"name\":\"Costruiamo un sistema di autenticazione macchina-macchina con Amazon Cognito - Proud2beCloud Blog\",\"isPartOf\":{\"@id\":\"https:\/\/blog.besharp.it\/it\/#website\"},\"datePublished\":\"2020-09-18T09:55:48+00:00\",\"dateModified\":\"2022-09-07T10:30:15+00:00\",\"author\":{\"@id\":\"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/0b3e69eb2dcb125d58476b906ec1c7bc\"},\"description\":\"Come creare un sistema di autenticazione di tipo macchina-macchina sicuro, affidabile e completamente gestito sfruttando Amazon Cognito e gli User Pool.\",\"breadcrumb\":{\"@id\":\"https:\/\/blog.besharp.it\/it\/costruiamo-un-sistema-di-autenticazione-macchina-macchina-con-amazon-cognito\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.besharp.it\/it\/costruiamo-un-sistema-di-autenticazione-macchina-macchina-con-amazon-cognito\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.besharp.it\/it\/costruiamo-un-sistema-di-autenticazione-macchina-macchina-con-amazon-cognito\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blog.besharp.it\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Costruiamo un sistema di autenticazione macchina-macchina con Amazon Cognito\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.besharp.it\/it\/#website\",\"url\":\"https:\/\/blog.besharp.it\/it\/\",\"name\":\"Proud2beCloud Blog\",\"description\":\"il blog di beSharp\",\"alternateName\":\"Proud2beCloud Blog\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.besharp.it\/it\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/0b3e69eb2dcb125d58476b906ec1c7bc\",\"name\":\"Matteo Moroni\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/acad790b9bb4c6d62e076ecdc1debb35?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/acad790b9bb4c6d62e076ecdc1debb35?s=96&d=mm&r=g\",\"caption\":\"Matteo Moroni\"},\"description\":\"DevOps e Solution Architect di beSharp, mi occupo di sviluppare soluzioni Saas, Data Analysis, HPC e di progettare architetture non convenzionali a complessit\u00e0 divergente. Appassionato di informatica e fisica, da sempre lavoro nella prima e ho un PhD nella seconda. Parlare di tutto ci\u00f2 che \u00e8 tecnico e nerd mi rende felice!\",\"url\":\"https:\/\/blog.besharp.it\/it\/author\/matteo-moroni\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Costruiamo un sistema di autenticazione macchina-macchina con Amazon Cognito - Proud2beCloud Blog","description":"Come creare un sistema di autenticazione di tipo macchina-macchina sicuro, affidabile e completamente gestito sfruttando Amazon Cognito e gli User Pool.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.besharp.it\/it\/costruiamo-un-sistema-di-autenticazione-macchina-macchina-con-amazon-cognito\/","og_locale":"it_IT","og_type":"article","og_title":"Costruiamo un sistema di autenticazione machine-to-machine con Amazon Cognito.","og_description":"Creiamo un sistema di autenticazione di tipo macchina-macchina sicuro, affidabile e fully managed sfruttando Amazon Cognito.","og_url":"https:\/\/blog.besharp.it\/it\/costruiamo-un-sistema-di-autenticazione-macchina-macchina-con-amazon-cognito\/","og_site_name":"Proud2beCloud Blog","article_published_time":"2020-09-18T09:55:48+00:00","article_modified_time":"2022-09-07T10:30:15+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/blog.besharp.it\/wp-content\/uploads\/2020\/09\/facebook-link-image-1.png","type":"image\/png"}],"author":"Matteo Moroni","twitter_card":"summary_large_image","twitter_title":"Sistema di autenticazione macchina-macchina con Amazon Cognito.","twitter_description":"Creiamo un sistema di autenticazione di tipo macchina-macchina sicuro, affidabile e fully managed sfruttando Amazon Cognito.","twitter_image":"https:\/\/blog.besharp.it\/wp-content\/uploads\/2020\/09\/twitter-shared-link-1.png","twitter_misc":{"Scritto da":"Matteo Moroni","Tempo di lettura stimato":"8 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blog.besharp.it\/it\/costruiamo-un-sistema-di-autenticazione-macchina-macchina-con-amazon-cognito\/","url":"https:\/\/blog.besharp.it\/it\/costruiamo-un-sistema-di-autenticazione-macchina-macchina-con-amazon-cognito\/","name":"Costruiamo un sistema di autenticazione macchina-macchina con Amazon Cognito - Proud2beCloud Blog","isPartOf":{"@id":"https:\/\/blog.besharp.it\/it\/#website"},"datePublished":"2020-09-18T09:55:48+00:00","dateModified":"2022-09-07T10:30:15+00:00","author":{"@id":"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/0b3e69eb2dcb125d58476b906ec1c7bc"},"description":"Come creare un sistema di autenticazione di tipo macchina-macchina sicuro, affidabile e completamente gestito sfruttando Amazon Cognito e gli User Pool.","breadcrumb":{"@id":"https:\/\/blog.besharp.it\/it\/costruiamo-un-sistema-di-autenticazione-macchina-macchina-con-amazon-cognito\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.besharp.it\/it\/costruiamo-un-sistema-di-autenticazione-macchina-macchina-con-amazon-cognito\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.besharp.it\/it\/costruiamo-un-sistema-di-autenticazione-macchina-macchina-con-amazon-cognito\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.besharp.it\/it\/"},{"@type":"ListItem","position":2,"name":"Costruiamo un sistema di autenticazione macchina-macchina con Amazon Cognito"}]},{"@type":"WebSite","@id":"https:\/\/blog.besharp.it\/it\/#website","url":"https:\/\/blog.besharp.it\/it\/","name":"Proud2beCloud Blog","description":"il blog di beSharp","alternateName":"Proud2beCloud Blog","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.besharp.it\/it\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"it-IT"},{"@type":"Person","@id":"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/0b3e69eb2dcb125d58476b906ec1c7bc","name":"Matteo Moroni","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/acad790b9bb4c6d62e076ecdc1debb35?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/acad790b9bb4c6d62e076ecdc1debb35?s=96&d=mm&r=g","caption":"Matteo Moroni"},"description":"DevOps e Solution Architect di beSharp, mi occupo di sviluppare soluzioni Saas, Data Analysis, HPC e di progettare architetture non convenzionali a complessit\u00e0 divergente. Appassionato di informatica e fisica, da sempre lavoro nella prima e ho un PhD nella seconda. Parlare di tutto ci\u00f2 che \u00e8 tecnico e nerd mi rende felice!","url":"https:\/\/blog.besharp.it\/it\/author\/matteo-moroni\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/posts\/1747"}],"collection":[{"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/comments?post=1747"}],"version-history":[{"count":0,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/posts\/1747\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/media\/1768"}],"wp:attachment":[{"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/media?parent=1747"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/categories?post=1747"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/tags?post=1747"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}