Infrastruttura di sicurezza: autenticazione - Procedure di mitigazioneSecurity Frame: Authentication | Mitigations

Prodotto o servizioProduct/Service ArticoloArticle
Applicazione WebWeb Application
DatabaseDatabase
Hub eventi di AzureAzure Event Hub
Limite di trust di AzureAzure Trust Boundary
Limite di trust di Service FabricService Fabric Trust Boundary
Identity ServerIdentity Server
Limite di Trust del computerMachine Trust Boundary
WCFWCF
API WebWeb API
Azure ADAzure AD
Gateway IoT sul campoIoT Field Gateway
Gateway IoT cloudIoT Cloud Gateway
Archiviazione di AzureAzure Storage

Valutare l'uso di un meccanismo di autenticazione standard per l'autenticazione nell'applicazione WebConsider using a standard authentication mechanism to authenticate to Web Application

TitoloTitle DettagliDetails
ComponenteComponent Applicazione Web.Web Application
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies GenericoGeneric
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences N/DN/A
DettagliDetails

L'autenticazione è il processo che permette a un'entità di dimostrare la propria identità, in genere mediante l'uso di credenziali, come un nome utente e una password.Authentication is the process where an entity proves its identity, typically through credentials, such as a user name and password. È possibile prendere in considerazione diversi protocolli di autenticazione disponibili,There are multiple authentication protocols available which may be considered. alcuni dei quali sono elencati di seguito:Some of them are listed below:

  • Certificati clientClient certificates
  • Basato su WindowsWindows based
  • Basato su formForms based
  • Federazione: AD FSFederation - ADFS
  • Federazione: Azure ADFederation - Azure AD
  • Federazione: Identity ServerFederation - Identity Server

Valutare l'uso di un meccanismo di autenticazione standard per identificare il processo di origineConsider using a standard authentication mechanism to identify the source process

Gestire in modo sicuro scenari di autenticazione non riuscita mediante le applicazioniApplications must handle failed authentication scenarios securely

TitoloTitle DettagliDetails
ComponenteComponent Applicazione Web.Web Application
Fase SDLSDL Phase CompilareBuild
Tecnologie applicabiliApplicable Technologies GenericoGeneric
Attributes (Attributi) (Attributi)Attributes N/DN/A
RiferimentiReferences N/DN/A
DettagliDetails

Le applicazioni che eseguono l'autenticazione esplicita degli utenti devono gestire in modo sicuro gli scenari di autenticazione non riuscita. Il meccanismo di autenticazione deve:Applications that explicitly authenticate users must handle failed authentication scenarios securely.The authentication mechanism must:

  • Negare l'accesso alle risorse con privilegi quando l'autenticazione ha esito negativo.Deny access to privileged resources when authentication fails
  • Visualizzare un messaggio di errore generico in caso di autenticazione non riuscita e accesso negato.Display a generic error message after failed authentication and access denied occurs

Verificare quanto segue:Test for:

  • Protezione delle risorse con privilegi dopo accessi non riusciti.Protection of privileged resources after failed logins
  • Visualizzazione di un messaggio di errore generico in caso di autenticazione non riuscita e accesso negato.A generic error message is displayed on failed authentication and access denied event(s)
  • Disabilitazione degli account dopo un numero eccessivo di tentativi non riusciti.Accounts are disabled after an excessive number of failed attempts

    Abilitare l'autenticazione adattiva o incrementaleEnable step up or adaptive authentication

    TitoloTitle DettagliDetails
    ComponenteComponent Applicazione Web.Web Application
    Fase SDLSDL Phase CompilareBuild
    Tecnologie applicabiliApplicable Technologies GenericoGeneric
    Attributes (Attributi) (Attributi)Attributes N/DN/A
    RiferimentiReferences N/DN/A
    DettagliDetails

    Verificare che l'applicazione abbia un passaggio di autorizzazione aggiuntivo, ad esempio con un'autenticazione adattiva o incrementale, tramite l'autenticazione a più fattori come l'invio di OTP in SMS, messaggi di posta elettronica e così via o con una richiesta di riautenticazione, in modo da coinvolgere l'utente prima di concedere l'accesso a informazioni riservate.Verify the application has additional authorization (such as step up or adaptive authentication, via multi-factor authentication such as sending OTP in SMS, email etc. or prompting for re-authentication) so the user is challenged before being granted access to sensitive information. Questa regola si applica anche alle modifiche importanti a un account o un'azione.This rule also applies for making critical changes to an account or action

    Ciò significa che l'adattamento dell'autenticazione deve essere implementato in modo che venga applicata correttamente l'autorizzazione sensibile al contesto per impedire la manipolazione non autorizzata, ad esempio tramite la manomissione dei parametri.This also means that the adaptation of authentication has to be implemented in such a manner that the application correctly enforces context-sensitive authorization so as to not allow unauthorized manipulation by means of in example, parameter tampering

    Assicurarsi che le interfacce amministrative siano bloccate correttamenteEnsure that administrative interfaces are appropriately locked down

    TitoloTitle DettagliDetails
    ComponenteComponent Applicazione Web.Web Application
    Fase SDLSDL Phase CompilareBuild
    Tecnologie applicabiliApplicable Technologies GenericoGeneric
    Attributes (Attributi) (Attributi)Attributes N/DN/A
    RiferimentiReferences N/DN/A
    DettagliDetails La prima soluzione consiste nel concedere l'accesso all'interfaccia amministrativa solo da un determinato intervallo IP di origine.The first solution is to grant access only from a certain source IP range to the administrative interface. Se tale soluzione non è applicabile, è sempre consigliabile adottare un'autenticazione adattiva o incrementale per l'accesso all'interfaccia di amministrazione.If that solution would not be possible than it is always recommended to enforce a step-up or adaptive authentication for logging in into the administrative interface

    Implementare in modo sicuro funzionalità per la password dimenticataImplement forgot password functionalities securely

    TitoloTitle DettagliDetails
    ComponenteComponent Applicazione Web.Web Application
    Fase SDLSDL Phase CompilareBuild
    Tecnologie applicabiliApplicable Technologies GenericoGeneric
    Attributes (Attributi) (Attributi)Attributes N/DN/A
    RiferimentiReferences N/DN/A
    DettagliDetails

    Verificare prima di tutto che la funzionalità Password dimenticata e altri percorsi di recupero inviino un collegamento con un token di attivazione di durata limitata, anziché la password stessa.The first thing is to verify that forgot password and other recovery paths send a link including a time-limited activation token rather than the password itself. Potrebbe essere necessaria una ulteriore autenticazione basata su token software, come token SMS, applicazioni mobili native e così via, prima dell'invio del collegamento.Additional authentication based on soft-tokens (e.g. SMS token, native mobile applications, etc.) can be required as well before the link is sent over. Evitare quindi di bloccare l'account utente durante il processo di recupero di una nuova password.Second, you should not lock out the users account whilst the process of getting a new password is in progress.

    Questo potrebbe causare un attacco Denial of Service ogni volta che un utente malintenzionato decide di bloccare intenzionalmente gli utenti con un attacco automatizzato.This could lead to a Denial of service attack whenever an attacker decides to intentionally lock out the users with an automated attack. Ogni volta che viene avviata la richiesta di una nuova password, il messaggio visualizzato deve essere generalizzato per impedire l'enumerazione del nome utente.Third, whenever the new password request was set in progress, the message you display should be generalized in order to prevent username enumeration. Infine, occorre sempre impedire l'uso di password precedenti e implementare criteri di password complessi.Fourth, always disallow the use of old passwords and implement a strong password policy.

    Assicurarsi che vengano implementati criteri di account e passwordEnsure that password and account policy are implemented

    TitoloTitle DettagliDetails
    ComponenteComponent Applicazione Web.Web Application
    Fase SDLSDL Phase CompilareBuild
    Tecnologie applicabiliApplicable Technologies GenericoGeneric
    Attributes (Attributi) (Attributi)Attributes N/DN/A
    RiferimentiReferences N/DN/A
    DettagliDetails

    È necessario implementare criteri di account e password in conformità con i criteri e le procedure consigliate dell'organizzazione.Password and account policy in compliance with organizational policy and best practices should be implemented.

    Per proteggersi da attacchi di forza bruta e attacchi a dizionario è necessario implementare criteri per password complesse, per fare in modo che gli utenti creino password complesse, ad esempio con una lunghezza minima di 12 caratteri o con caratteri speciali e alfanumerici.To defend against brute-force and dictionary based guessing: Strong password policy must be implemented to ensure that users create complex password (e.g., 12 characters minimum length, alphanumeric and special characters).

    È anche possibile implementare i criteri di blocco account illustrati di seguito:Account lockout policies may be implemented in the following manner:

    • Blocco temporaneo: questo tipo di blocco è utile per proteggere gli utenti da attacchi di forza bruta.Soft lock-out: This can be a good option for protecting your users against brute force attacks. Ad esempio, quando l'utente immette una password errata per tre volte l'applicazione può bloccare l'account per un minuto. Questo rallenta l'attacco di forza bruta alla password e scoraggia l'utente malintenzionato dal continuare.For example, whenever the user enters a wrong password three times the application could lock down the account for a minute in order to slow down the process of brute forcing his password making it less profitable for the attacker to proceed. Se si dovessero implementare contromisure di blocco permanente, in questo esempio si otterrebbe un Denial of Service tramite il blocco permanente degli account.If u were to implement hard lock-out countermeasures for this example you would achieve a "Dos" by permanently locking out accounts. In alternativa, l'applicazione può generare una password monouso (OTP) e inviarla fuori banda all'utente, ad esempio tramite posta elettronica, SMS e così via.Alternatively, application may generate an OTP (One Time Password) and send it out-of-band (through email, sms etc.) to the user. Un altro approccio consiste nell'implementare CAPTCHA quando viene raggiunto un numero limite di tentativi non riusciti.Another approach may be to implement CAPTCHA after a threshold number of failed attempts is reached.
    • Blocco permanente: questo tipo di blocco deve essere applicato quando si rileva un attacco a un'applicazione da parte di un utente. Per contrastarlo, l'account dell'utente viene bloccato in modo permanente fino al termine delle analisi del team di risposta.Hard lock-out: This type of lockout should be applied whenever you detect a user attacking your application and counter him by means of permanently locking out his account until a response team had time to do their forensics. Dopo tale processo si può decidere se restituire l'account all'utente o intraprendere eventuali azioni legali.After this process you can decide to give the user back his account or take further legal actions against him. Questo tipo di approccio impedisce all'autore dell'attacco di penetrare ulteriormente nell'applicazione e nell'infrastruttura.This type of approach prevents the attacker from further penetrating your application and infrastructure.

    Per difendersi da attacchi ad account prevedibili e predefiniti, verificare che tutte le chiavi e le password siano sostituibili e che vengano generate o sostituite dopo la fase di installazione.To defend against attacks on default and predictable accounts, verify that all keys and passwords are replaceable, and are generated or replaced after installation time.

    Se l'applicazione deve generare automaticamente le password, assicurarsi che le password generate siano casuali e abbiano un'entropia elevata.If the application has to auto-generate passwords, ensure that the generated passwords are random and have high entropy.

    Implementare controlli per prevenire l'enumerazione del nome utenteImplement controls to prevent username enumeration

    TitoloTitle DettagliDetails
    ComponenteComponent Applicazione Web.Web Application
    Fase SDLSDL Phase CompilareBuild
    Tecnologie applicabiliApplicable Technologies GenericoGeneric
    Attributes (Attributi) (Attributi)Attributes N/DN/A
    RiferimentiReferences N/DN/A
    PassaggiSteps È necessario generalizzare i messaggi di errore per prevenire l'enumerazione del nome utente.All error messages should be generalized in order to prevent username enumeration. A volte non è possibile evitare la divulgazione di informazioni nelle funzionalità, ad esempio in una pagina di registrazione.Also sometimes you cannot avoid information leaking in functionalities such as a registration page. In tal caso è necessario usare metodi di limitazione della frequenza, ad esempio i CAPTCHA, per prevenite attacchi automatizzati da parte di utenti malintenzionati.Here you need to use rate-limiting methods like CAPTCHA to prevent an automated attack by an attacker.

    Usare l'autenticazione di Windows per la connessione a SQL Server, se possibileWhen possible, use Windows Authentication for connecting to SQL Server

    TitoloTitle DettagliDetails
    ComponenteComponent DatabaseDatabase
    Fase SDLSDL Phase CompilareBuild
    Tecnologie applicabiliApplicable Technologies LocaleOnPrem
    Attributes (Attributi) (Attributi)Attributes Versione SQL: tutteSQL Version - All
    RiferimentiReferences SQL Server: scegliere una modalità di autenticazioneSQL Server - Choose an Authentication Mode
    PassaggiSteps L'autenticazione di Windows usa il protocollo di sicurezza Kerberos, consente l'applicazione dei criteri password per la convalida della complessità delle password e supporta il blocco account e la scadenza delle password.Windows Authentication uses Kerberos security protocol, provides password policy enforcement with regard to complexity validation for strong passwords, provides support for account lockout, and supports password expiration.

    Usare l'autenticazione di Azure Active Directory per la connessione al database SQL, se possibileWhen possible use Azure Active Directory Authentication for Connecting to SQL Database

    TitoloTitle DettagliDetails
    ComponenteComponent DatabaseDatabase
    Fase SDLSDL Phase CompilareBuild
    Tecnologie applicabiliApplicable Technologies SQL AzureSQL Azure
    Attributes (Attributi) (Attributi)Attributes Versione SQL: 12SQL Version - V12
    RiferimentiReferences Connettersi al Database SQL utilizzando l’autenticazione di Azure Active DirectoryConnecting to SQL Database By Using Azure Active Directory Authentication
    PassaggiSteps Versione minima: è necessario usare la versione 12 per consentire al database SQL di Azure di usare l'autenticazione di AAD nella directory Microsoft.Minimum version: Azure SQL Database V12 required to allow Azure SQL Database to use AAD Authentication against the Microsoft Directory

    Assicurarsi che vengano applicati i criteri di account e password in SQL Server quando viene usata la modalità di autenticazione SQLWhen SQL authentication mode is used, ensure that account and password policy are enforced on SQL server

    TitoloTitle DettagliDetails
    ComponenteComponent DatabaseDatabase
    Fase SDLSDL Phase CompilareBuild
    Tecnologie applicabiliApplicable Technologies GenericoGeneric
    Attributes (Attributi) (Attributi)Attributes N/DN/A
    RiferimentiReferences Criteri password di SQL ServerSQL Server password policy
    PassaggiSteps Quando si usa l'autenticazione di SQL Server, in SQL Server vengono creati account di accesso che non sono basati su account utente di Windows.When using SQL Server Authentication, logins are created in SQL Server that are not based on Windows user accounts. Sia il nome utente che la password vengono creati mediante SQL Server e archiviati in SQL Server.Both the user name and the password are created by using SQL Server and stored in SQL Server. SQL Server può fare uso di meccanismi dei criteri password di Windows.SQL Server can use Windows password policy mechanisms. Può applicare la stessa complessità e i criteri di scadenza di Windows alle password usate all'interno di SQL Server.It can apply the same complexity and expiration policies used in Windows to passwords used inside SQL Server.

    Non usare l'autenticazione SQL in database indipendentiDo not use SQL Authentication in contained databases

    TitoloTitle DettagliDetails
    ComponenteComponent DatabaseDatabase
    Fase SDLSDL Phase CompilareBuild
    Tecnologie applicabiliApplicable Technologies Locale, SQL AzureOnPrem, SQL Azure
    Attributes (Attributi) (Attributi)Attributes Versione SQL: MSSQL2012, versione SQL: 12SQL Version - MSSQL2012, SQL Version - V12
    RiferimentiReferences Procedure di sicurezza consigliate con i database indipendentiSecurity Best Practices with Contained Databases
    PassaggiSteps L'assenza di criteri password applicati può aumentare la probabilità che vengano stabilite credenziali deboli in un database indipendente.The absence of an enforced password policy may increase the likelihood of a weak credential being established in a contained database. Fare uso dell'autenticazione di Windows.Leverage Windows Authentication.

    Usare credenziali di autenticazione per dispositivo con i token di firma di accesso condivisoUse per device authentication credentials using SaS tokens

    TitoloTitle DettagliDetails
    ComponenteComponent Hub eventi di AzureAzure Event Hub
    Fase SDLSDL Phase CompilareBuild
    Tecnologie applicabiliApplicable Technologies GenericoGeneric
    Attributes (Attributi) (Attributi)Attributes N/DN/A
    RiferimentiReferences Panoramica del modello di sicurezza e autenticazione di Hub eventiEvent Hubs authentication and security model overview
    PassaggiSteps

    Il modello di sicurezza di Hub eventi si basa su una combinazione di token di firma di accesso condiviso e autori di eventi.The Event Hubs security model is based on a combination of Shared Access Signature (SAS) tokens and event publishers. Il nome dell'autore rappresenta l'ID dispositivo che riceve il token.The publisher name represents the DeviceID that receives the token. Questo permette di associare i token generati con i rispettivi dispositivi.This would help associate the tokens generated with the respective devices.

    Tutti i messaggi vengono contrassegnati con l'iniziatore sul lato del servizio, per consentire il rilevamento di tentativi di spoofing dell'origine nel payload.All messages are tagged with originator on service side allowing detection of in-payload origin spoofing attempts. Durante l'autenticazione dei dispositivi, generare un token di firma di accesso condiviso per dispositivo con ambito limitato a un autore univoco.When authenticating devices, generate a per device SaS token scoped to a unique publisher.

    Abilitare Azure Multi-Factor Authentication per amministratori di AzureEnable Azure Multi-Factor Authentication for Azure Administrators

    TitoloTitle DettagliDetails
    ComponenteComponent Limite di trust di AzureAzure Trust Boundary
    Fase SDLSDL Phase DistribuzioneDeployment
    Tecnologie applicabiliApplicable Technologies GenericoGeneric
    Attributes (Attributi) (Attributi)Attributes N/DN/A
    RiferimentiReferences Informazioni su Azure Multi-Factor AuthenticationWhat is Azure Multi-Factor Authentication?
    PassaggiSteps

    Multi-Factor Authentication (MFA) è un metodo di autenticazione che richiede più di un metodo di verifica e con il quale viene aggiunto un secondo livello di sicurezza critico agli accessi e alle transazioni degli utenti.Multi-factor authentication (MFA) is a method of authentication that requires more than one verification method and adds a critical second layer of security to user sign-ins and transactions. In genere richiede due o più dei metodi di verifica seguenti:It works by requiring any two or more of the following verification methods:

    • Un'informazione nota (in genere una password)Something you know (typically a password)
    • Un oggetto che si possiede (un dispositivo attendibile non facile da duplicare, ad esempio un telefono)Something you have (a trusted device that is not easily duplicated, like a phone)
    • Una caratteristica fisica dell'utente (biometrica)Something you are (biometrics)

      Limitare l'accesso anonimo a un cluster di Service FabricRestrict anonymous access to Service Fabric Cluster

      TitoloTitle DettagliDetails
      ComponenteComponent Limite di trust di Service FabricService Fabric Trust Boundary
      Fase SDLSDL Phase DistribuzioneDeployment
      Tecnologie applicabiliApplicable Technologies GenericoGeneric
      Attributes (Attributi) (Attributi)Attributes Ambiente: AzureEnvironment - Azure
      RiferimentiReferences Scenari di sicurezza di un cluster di Service FabricService Fabric cluster security scenarios
      PassaggiSteps

      Per impedire a utenti non autorizzati di connettersi al cluster, è necessario proteggerlo, in particolare quando sono in esecuzione carichi di lavoro di produzione.Clusters should always be secured to prevent unauthorized users from connecting to your cluster, especially when it has production workloads running on it.

      Durante la creazione di un cluster di Service Fabric, assicurarsi che la modalità di sicurezza sia impostata su "secure" e configurare il certificato server X.509 necessario.While creating a service fabric cluster, ensure that the security mode is set to "secure" and configure the required X.509 server certificate. La creazione di un cluster "insecure" permette a qualsiasi utente anonimo di connettersi al cluster, se questo espone gli endpoint di gestione a Internet pubblico.Creating an "insecure" cluster will allow any anonymous user to connect to it if it exposes management endpoints to the public Internet.

      Assicurarsi che il certificato da client a nodo di Service Fabric sia diverso dal certificato da nodo a nodoEnsure that Service Fabric client-to-node certificate is different from node-to-node certificate

      TitoloTitle DettagliDetails
      ComponenteComponent Limite di trust di Service FabricService Fabric Trust Boundary
      Fase SDLSDL Phase DistribuzioneDeployment
      Tecnologie applicabiliApplicable Technologies GenericoGeneric
      Attributes (Attributi) (Attributi)Attributes Ambiente: Azure, ambiente: autonomoEnvironment - Azure, Environment - Stand alone
      RiferimentiReferences Sicurezza basata su certificati da client a nodo in Service Fabric, Connettersi a un cluster sicuro tramite il certificato clientService Fabric Client-to-node certificate security, Connect to a secure cluster using client certificate
      PassaggiSteps

      La sicurezza basata su certificati da client a nodo viene configurata durante la creazione del cluster tramite il portale di Azure, modelli di Azure Resource Manager o un modello JSON autonomo specificando un certificato client di amministrazione e/o un certificato client di sola lettura.Client-to-node certificate security is configured while creating the cluster either through the Azure portal, Resource Manager templates or a standalone JSON template by specifying an admin client certificate and/or a user client certificate.

      I certificati client di amministrazione e i certificati client utente specificati devono essere diversi dai certificati primario e secondario specificati per la sicurezza da nodo a nodo.The admin client and user client certificates you specify should be different than the primary and secondary certificates you specify for Node-to-node security.

      Usare Azure Active Directory per autenticare client in cluster di Service FabricUse AAD to authenticate clients to service fabric clusters

      TitoloTitle DettagliDetails
      ComponenteComponent Limite di trust di Service FabricService Fabric Trust Boundary
      Fase SDLSDL Phase DistribuzioneDeployment
      Tecnologie applicabiliApplicable Technologies GenericoGeneric
      Attributes (Attributi) (Attributi)Attributes Ambiente: AzureEnvironment - Azure
      RiferimentiReferences Scenari di sicurezza per i cluster: raccomandazioni sulla sicurezzaCluster security scenarios - Security Recommendations
      PassaggiSteps I cluster in esecuzione in Azure possono anche proteggere l'accesso agli endpoint di gestione usando Azure Active Directory (AAD), oltre ai certificati client.Clusters running on Azure can also secure access to the management endpoints using Azure Active Directory (AAD), apart from client certificates. Per i cluster di Azure è consigliabile usare la sicurezza di AAD per l'autenticazione dei client e dei certificati per la sicurezza da nodo a nodo.For Azure clusters, it is recommended that you use AAD security to authenticate clients and certificates for node-to-node security.

      Assicurarsi che i certificati di Service Fabric vengano ottenuti da un'Autorità di certificazione (CA) approvataEnsure that service fabric certificates are obtained from an approved Certificate Authority (CA)

      TitoloTitle DettagliDetails
      ComponenteComponent Limite di trust di Service FabricService Fabric Trust Boundary
      Fase SDLSDL Phase DistribuzioneDeployment
      Tecnologie applicabiliApplicable Technologies GenericoGeneric
      Attributes (Attributi) (Attributi)Attributes Ambiente: AzureEnvironment - Azure
      RiferimentiReferences Certificati X.509 e Service FabricX.509 certificates and Service Fabric
      PassaggiSteps

      Service Fabric usa i certificati server X.509 per l'autenticazione dei nodi e dei client.Service Fabric uses X.509 server certificates for authenticating nodes and clients.

      Aspetti importanti da considerare nell'uso dei certificati in Service Fabric:Some important things to consider while using certificates in service fabrics:

      • È consigliabile creare i certificati usati nei cluster che eseguono carichi di lavoro di produzione con un servizio certificati di Windows Server configurato correttamente oppure ottenerli da un'Autorità di certificazione (CA) approvata.Certificates used in clusters running production workloads should be created by using a correctly configured Windows Server certificate service or obtained from an approved Certificate Authority (CA). L'Autorità di certificazione può essere una CA esterna approvata o un'infrastruttura a chiave pubblica (PKI) a gestione interna.The CA can be an approved external CA or a properly managed internal Public Key Infrastructure (PKI)
      • Non usare mai in fase di produzione certificati temporanei o di test creati con strumenti come MakeCert.exe.Never use any temporary or test certificates in production that are created with tools such as MakeCert.exe
      • È possibile usare un certificato autofirmato, ma solo per i cluster di test e non nell'ambiente di produzione.You can use a self-signed certificate, but should only do so for test clusters and not in production

      Usare scenari di autenticazione standard supportati da Identity ServerUse standard authentication scenarios supported by Identity Server

      TitoloTitle DettagliDetails
      ComponenteComponent Identity ServerIdentity Server
      Fase SDLSDL Phase CompilareBuild
      Tecnologie applicabiliApplicable Technologies GenericoGeneric
      Attributes (Attributi) (Attributi)Attributes N/DN/A
      RiferimentiReferences IdentityServer3: quadro generaleIdentityServer3 - The Big Picture
      PassaggiSteps

      Di seguito sono elencate le interazioni tipiche supportate da Identity Server:Below are the typical interactions supported by Identity Server:

      • Comunicazione tra browser e applicazioni Web.Browsers communicate with web applications
      • Comunicazione tra applicazioni Web e API Web, talvolta in modo autonomo e talvolta per conto dell'utente.Web applications communicate with web APIs (sometimes on their own, sometimes on behalf of a user)
      • Comunicazione tra applicazioni basate su browser e API Web.Browser-based applications communicate with web APIs
      • Comunicazione tra applicazioni native e API Web.Native applications communicate with web APIs
      • Comunicazione tra applicazioni basate su server e API Web.Server-based applications communicate with web APIs
      • Comunicazione tra API Web e API Web, talvolta in modo autonomo e talvolta per conto dell'utente.Web APIs communicate with web APIs (sometimes on their own, sometimes on behalf of a user)

      Sostituire la cache dei token di Identity Server predefinita con un'alternativa scalabileOverride the default Identity Server token cache with a scalable alternative

      TitoloTitle DettagliDetails
      ComponenteComponent Identity ServerIdentity Server
      Fase SDLSDL Phase DistribuzioneDeployment
      Tecnologie applicabiliApplicable Technologies GenericoGeneric
      Attributes (Attributi) (Attributi)Attributes N/DN/A
      RiferimentiReferences Distribuzione di Identity Server: memorizzazione nella cacheIdentity Server Deployment - Caching
      PassaggiSteps

      IdentityServer ha una semplice cache in memoria predefinita.IdentityServer has a simple built-in in-memory cache. Tale cache è sufficiente per le applicazioni native su scala ridotta ma, per i motivi elencati di seguito, non può essere ridimensionata per le applicazioni back-end e di livello intermedio:While this is good for small scale native apps, it does not scale for mid tier and backend applications for the following reasons:

      • Queste applicazioni sono accessibili da più utenti contemporaneamente.These applications are accessed by many users at once. Il salvataggio di tutti i token di accesso nello stesso archivio crea problemi di isolamento e presenta difficoltà quando si opera su vasta scala. Un numero elevato di utenti, ognuno con un numero di token pari a quello delle risorse a cui l'app accede per suo conto, può far aumentare notevolmente la quantità e il costo delle operazioni di ricerca.Saving all access tokens in the same store creates isolation issues and presents challenges when operating at scale: many users, each with as many tokens as the resources the app accesses on their behalf, can mean huge numbers and very expensive lookup operations
      • Queste applicazioni vengono in genere distribuite in topologie distribuite, in cui più nodi devono avere accesso alla stessa cache.These applications are typically deployed on distributed topologies, where multiple nodes must have access to the same cache
      • I token memorizzati nella cache devono resistere in caso di disattivazione e riciclo del processo.Cached tokens must survive process recycles and deactivations
      • Per tutte queste ragioni, durante l'implementazione di app Web è consigliabile sostituire la cache dei token di Identity Server predefinita con un'alternativa scalabile, ad esempio Cache Redis di Azure.For all the above reasons, while implementing web apps, it is recommended to override the default Identity Server's token cache with a scalable alternative such as Azure Redis cache

      Assicurarsi che i file binari dell'applicazione distribuita abbiano una firma digitaleEnsure that deployed application's binaries are digitally signed

      TitoloTitle DettagliDetails
      ComponenteComponent Limite di trust dei computerMachine Trust Boundary
      Fase SDLSDL Phase DistribuzioneDeployment
      Tecnologie applicabiliApplicable Technologies GenericoGeneric
      Attributes (Attributi) (Attributi)Attributes N/DN/A
      RiferimentiReferences N/DN/A
      PassaggiSteps Assicurarsi che i file binari dell'applicazione distribuita abbiano una firma digitale, in modo che sia possibile verificare l'integrità dei file binari.Ensure that deployed application's binaries are digitally signed so that the integrity of the binaries can be verified

      Abilitare l'autenticazione nella connessione a code MSMQ in WCFEnable authentication when connecting to MSMQ queues in WCF

      TitoloTitle DettagliDetails
      ComponenteComponent WCFWCF
      Fase SDLSDL Phase CompilareBuild
      Tecnologie applicabiliApplicable Technologies Generico, .NET Framework 3Generic, NET Framework 3
      Attributes (Attributi) (Attributi)Attributes N/DN/A
      RiferimentiReferences MSDNMSDN
      PassaggiSteps Il programma non riesce ad abilitare l'autenticazione quando ci si connette a code MSMQ e un utente malintenzionato può inviare messaggi in modo anonimo alla coda per l'elaborazione.Program fails to enable authentication when connecting to MSMQ queues, an attacker can anonymously submit messages to the queue for processing. Se non si usa l'autenticazione per connettersi a una coda MSMQ usata per recapitare un messaggio a un altro programma, un utente malintenzionato potrebbe inviare un messaggio anonimo dannoso.If authentication is not used to connect to an MSMQ queue used to deliver a message to another program, an attacker could submit an anonymous message that is malicious.

      EsempioExample

      L'elemento <netMsmqBinding/> del file di configurazione WCF seguente indica a WCF di disabilitare l'autenticazione quando ci si connette a una coda MSMQ per il recapito di messaggi.The <netMsmqBinding/> element of the WCF configuration file below instructs WCF to disable authentication when connecting to an MSMQ queue for message delivery.

      <bindings>
          <netMsmqBinding>
              <binding>
                  <security>
                      <transport msmqAuthenticationMode=""None"" />
                  </security>
              </binding>
          </netMsmqBinding>
      </bindings>
      

      Configurare MSMQ perché venga sempre richiesta l'autenticazione del certificato o del dominio di Windows per qualsiasi messaggio in ingresso o in uscita.Configure MSMQ to require Windows Domain or Certificate authentication at all times for any incoming or outgoing messages.

      EsempioExample

      L'elemento <netMsmqBinding/> del file di configurazione WCF seguente indica a WCF di abilitare l'autenticazione quando ci si connette a una coda MSMQ.The <netMsmqBinding/> element of the WCF configuration file below instructs WCF to enable certificate authentication when connecting to an MSMQ queue. Il client viene autenticato tramite certificati X.509.The client is authenticated using X.509 certificates. Il certificato client deve essere presente nell'archivio certificati del server.The client certificate must be present in the certificate store of the server.

      <bindings>
          <netMsmqBinding>
              <binding>
                  <security>
                      <transport msmqAuthenticationMode=""Certificate"" />
                  </security>
              </binding>
          </netMsmqBinding>
      </bindings>
      

      WCF: non impostare il messaggio clientCredentialType su NessunoWCF-Do not set Message clientCredentialType to none

      TitoloTitle DettagliDetails
      ComponenteComponent WCFWCF
      Fase SDLSDL Phase CompilareBuild
      Tecnologie applicabiliApplicable Technologies .NET Framework 3.NET Framework 3
      Attributes (Attributi) (Attributi)Attributes Tipo di credenziali client: nessunoClient Credential Type - None
      RiferimentiReferences MSDN, FortifyMSDN, Fortify
      PassaggiSteps L'assenza di autenticazione indica che tutti possono accedere a questo servizio.The absence of authentication means everyone is able to access this service. Un servizio che non esegue l'autenticazione dei client consente l'accesso a tutti gli utenti.A service that does not authenticate its clients allows access to all users. Configurare l'applicazione per l'autenticazione con le credenziali del client.Configure the application to authenticate against client credentials. A tale scopo, è possibile impostare il messaggio clientCredentialType su Windows o su Certificate.This can be done by setting the message clientCredentialType to Windows or Certificate.

      EsempioExample

      <message clientCredentialType=""Certificate""/>
      

      WCF: non impostare il trasporto clientCredentialType su NessunoWCF-Do not set Transport clientCredentialType to none

      TitoloTitle DettagliDetails
      ComponenteComponent WCFWCF
      Fase SDLSDL Phase CompilareBuild
      Tecnologie applicabiliApplicable Technologies Generico, .NET Framework 3Generic, .NET Framework 3
      Attributes (Attributi) (Attributi)Attributes Tipo di credenziali client: nessunoClient Credential Type - None
      RiferimentiReferences MSDN, FortifyMSDN, Fortify
      PassaggiSteps L'assenza di autenticazione indica che tutti possono accedere a questo servizio.The absence of authentication means everyone is able to access this service. Un servizio che non esegue l'autenticazione dei client consente a tutti gli utenti di accedere alle funzionalità.A service that does not authenticate its clients allows all users to access its functionality. Configurare l'applicazione per l'autenticazione con le credenziali del client.Configure the application to authenticate against client credentials. A tale scopo, è possibile impostare il trasporto clientCredentialType su Windows o su Certificate.This can be done by setting the transport clientCredentialType to Windows or Certificate.

      EsempioExample

      <transport clientCredentialType=""Certificate""/>
      

      Assicurarsi che vengano usate tecniche di autenticazione standard per proteggere le API WebEnsure that standard authentication techniques are used to secure Web APIs

      TitoloTitle DettagliDetails
      ComponenteComponent API WebWeb API
      Fase SDLSDL Phase CompilareBuild
      Tecnologie applicabiliApplicable Technologies GenericoGeneric
      Attributes (Attributi) (Attributi)Attributes N/DN/A
      RiferimentiReferences Autenticazione e autorizzazione nell'API Web ASP.NET, Servizi di autenticazione esterna con l'API Web ASP.NET (C#)Authentication and Authorization in ASP.NET Web API, External Authentication Services with ASP.NET Web API (C#)
      PassaggiSteps

      L'autenticazione è il processo che permette a un'entità di dimostrare la propria identità, in genere mediante l'uso di credenziali, come un nome utente e una password.Authentication is the process where an entity proves its identity, typically through credentials, such as a user name and password. È possibile prendere in considerazione diversi protocolli di autenticazione disponibili,There are multiple authentication protocols available which may be considered. alcuni dei quali sono elencati di seguito:Some of them are listed below:

      • Certificati clientClient certificates
      • Basato su WindowsWindows based
      • Basato su formForms based
      • Federazione: AD FSFederation - ADFS
      • Federazione: Azure ADFederation - Azure AD
      • Federazione: Identity ServerFederation - Identity Server

      I collegamenti riportati nella sezione dei riferimenti permettono di ottenere informazioni dettagliate su come implementare ognuno degli schemi di autenticazione per proteggere un'API Web.Links in the references section provide low-level details on how each of the authentication schemes can be implemented to secure a Web API.

      Usare scenari di autenticazione standard supportati da Azure Active DirectoryUse standard authentication scenarios supported by Azure Active Directory

      TitoloTitle DettagliDetails
      ComponenteComponent Azure ADAzure AD
      Fase SDLSDL Phase CompilareBuild
      Tecnologie applicabiliApplicable Technologies GenericoGeneric
      Attributes (Attributi) (Attributi)Attributes N/DN/A
      RiferimentiReferences Scenari di autenticazione per Azure AD, Esempi di codice di Azure Active Directory, Guida per gli sviluppatori di Azure Active DirectoryAuthentication Scenarios for Azure AD, Azure Active Directory Code Samples, Azure Active Directory developer's guide
      PassaggiSteps

      Azure Active Directory (Azure AD) semplifica l'autenticazione per gli sviluppatori fornendo le identità come servizio, con il supporto per protocolli standard del settore come OAuth 2.0 e OpenID Connect.Azure Active Directory (Azure AD) simplifies authentication for developers by providing identity as a service, with support for industry-standard protocols such as OAuth 2.0 and OpenID Connect. Azure AD supporta i cinque scenari di applicazione principali descritti di seguito:Below are the five primary application scenarios supported by Azure AD:

      • Da Web browser ad applicazione Web: un utente deve accedere a un'applicazione Web protetta da Azure AD.Web Browser to Web Application: A user needs to sign in to a web application that is secured by Azure AD
      • Applicazione a pagina singola (SPA): un utente deve accedere a un'applicazione a pagina singola protetta da Azure AD.Single Page Application (SPA): A user needs to sign in to a single page application that is secured by Azure AD
      • Da applicazione nativa ad API Web: un'applicazione nativa in esecuzione in un telefono, un tablet o un PC deve autenticare un utente per ottenere risorse da un'API Web protetta da Azure AD.Native Application to Web API: A native application that runs on a phone, tablet, or PC needs to authenticate a user to get resources from a web API that is secured by Azure AD
      • Da applicazione Web ad API Web: un'applicazione Web deve ottenere risorse da un'API Web protetta da Azure AD.Web Application to Web API: A web application needs to get resources from a web API secured by Azure AD
      • Da daemon o applicazione server ad API Web: un'applicazione daemon o un'applicazione server priva di interfaccia utente Web deve ottenere risorse da un'API Web protetta da Azure AD.Daemon or Server Application to Web API: A daemon application or a server application with no web user interface needs to get resources from a web API secured by Azure AD

      Per informazioni dettagliate sull'implementazione, vedere i collegamenti riportati nella sezione dei riferimenti.Please refer to the links in the references section for low-level implementation details

      Sostituire la cache dei token di ADAL predefinita con un'alternativa scalabileOverride the default ADAL token cache with a scalable alternative

      TitoloTitle DettagliDetails
      ComponenteComponent Azure ADAzure AD
      Fase SDLSDL Phase CompilareBuild
      Tecnologie applicabiliApplicable Technologies GenericoGeneric
      Attributes (Attributi) (Attributi)Attributes N/DN/A
      RiferimentiReferences Modern Authentication with Azure Active Directory for Web Applications (Autenticazione moderna con Azure Active Directory per applicazioni Web), Using Redis as ADAL token cache (Uso di Redis come cache dei token ADAL)Modern Authentication with Azure Active Directory for Web Applications, Using Redis as ADAL token cache
      PassaggiSteps

      La cache predefinita usata da ADAL (Active Directory Authentication Library) è una cache in memoria che si basa su un archivio statico, disponibile a livello di processo.The default cache that ADAL (Active Directory Authentication Library) uses is an in-memory cache that relies on a static store, available process-wide. Tale cache è sufficiente per le applicazioni native ma, per i motivi elencati di seguito, non può essere ridimensionata per le applicazioni back-end e di livello intermedio:While this works for native applications, it does not scale for mid tier and backend applications for the following reasons:

      • Queste applicazioni sono accessibili da più utenti contemporaneamente.These applications are accessed by many users at once. Il salvataggio di tutti i token di accesso nello stesso archivio crea problemi di isolamento e presenta difficoltà quando si opera su vasta scala. Un numero elevato di utenti, ognuno con un numero di token pari a quello delle risorse a cui l'app accede per suo conto, può far aumentare notevolmente la quantità e il costo delle operazioni di ricerca.Saving all access tokens in the same store creates isolation issues and presents challenges when operating at scale: many users, each with as many tokens as the resources the app accesses on their behalf, can mean huge numbers and very expensive lookup operations
      • Queste applicazioni vengono in genere distribuite in topologie distribuite, in cui più nodi devono avere accesso alla stessa cache.These applications are typically deployed on distributed topologies, where multiple nodes must have access to the same cache
      • I token memorizzati nella cache devono resistere in caso di disattivazione e riciclo del processo.Cached tokens must survive process recycles and deactivations

      Per tutte queste ragioni, durante l'implementazione di app Web è consigliabile sostituire la cache dei token ADAL predefinita con un'alternativa scalabile, ad esempio Cache Redis di Azure.For all the above reasons, while implementing web apps, it is recommended to override the default ADAL token cache with a scalable alternative such as Azure Redis cache.

      Assicurarsi che venga usata la proprietà TokenReplayCache per impedire la riproduzione dei token di autenticazione ADALEnsure that TokenReplayCache is used to prevent the replay of ADAL authentication tokens

      TitoloTitle DettagliDetails
      ComponenteComponent Azure ADAzure AD
      Fase SDLSDL Phase CompilareBuild
      Tecnologie applicabiliApplicable Technologies GenericoGeneric
      Attributes (Attributi) (Attributi)Attributes N/DN/A
      RiferimentiReferences Modern Authentication with Azure Active Directory for Web Applications (Autenticazione moderna con Azure Active Directory per applicazioni Web)Modern Authentication with Azure Active Directory for Web Applications
      PassaggiSteps

      La proprietà TokenReplayCache consente agli sviluppatori di definire una cache di riproduzione dei token, ovvero un archivio in cui salvare i token allo scopo di verificare che nessun token venga usato più di una volta.The TokenReplayCache property allows developers to define a token replay cache, a store that can be used for saving tokens for the purpose of verifying that no token can be used more than once.

      Si tratta di una misura adatta a un tipo di attacco comune, detto attacco di riproduzione dei token, in cui un utente malintenzionato che intercetta il token inviato al momento dell'accesso potrebbe provare a inviarlo nuovamente all'app, ovvero "riprodurlo", per stabilire una nuova sessione.This is a measure against a common attack, the aptly called token replay attack: an attacker intercepting the token sent at sign-in might try to send it to the app again (“replay” it) for establishing a new session. Ad esempio, nel flusso di concessione del codice OIDC dopo l'autenticazione dell'utente viene inviata una richiesta all'endpoint "/signin-oidc" della relying party con i parametri "id_token", "code" e "state".E.g., In OIDC code-grant flow, after successful user authentication, a request to "/signin-oidc" endpoint of the relying party is made with "id_token", "code" and "state" parameters.

      La relying party convalida la richiesta e stabilisce una nuova sessione.The relying party validates this request and establishes a new session. Se un antagonista acquisisce questa richiesta e la riproduce, può stabilire una sessione ed effettuare lo spoofing dell'utente.If an adversary captures this request and replays it, he/she can establish a successful session and spoof the user. La presenza del parametro nonce in OpenID Connect può limitare, ma non eliminare del tutto, le circostanze che permettono di mettere in atto l'attacco.The presence of the nonce in OpenID Connect can limit but not fully eliminate the circumstances in which the attack can be successfully enacted. Per proteggere le applicazioni, gli sviluppatori possono fornire un'implementazione di ITokenReplayCache e assegnare un'istanza a TokenReplayCache.To protect their applications, developers can provide an implementation of ITokenReplayCache and assign an instance to TokenReplayCache.

      EsempioExample

      // ITokenReplayCache defined in ADAL
      public interface ITokenReplayCache
      {
      bool TryAdd(string securityToken, DateTime expiresOn);
      bool TryFind(string securityToken);
      }
      

      EsempioExample

      Di seguito è riportato un esempio di implementazione dell'interfaccia ITokenReplayCache.Here is a sample implementation of the ITokenReplayCache interface. Personalizzare l'esempio e implementare il framework di memorizzazione nella cache specifico del progetto.(Please customize and implement your project-specific caching framework)

      public class TokenReplayCache : ITokenReplayCache
      {
          private readonly ICacheProvider cache; // Your project-specific cache provider
          public TokenReplayCache(ICacheProvider cache)
          {
              this.cache = cache;
          }
          public bool TryAdd(string securityToken, DateTime expiresOn)
          {
              if (this.cache.Get<string>(securityToken) == null)
              {
                  this.cache.Set(securityToken, securityToken);
                  return true;
              }
              return false;
          }
          public bool TryFind(string securityToken)
          {
              return this.cache.Get<string>(securityToken) != null;
          }
      }
      

      Le opzioni OIDC devono fare riferimento alla cache implementata tramite la proprietà "TokenValidationParameters", come indicato di seguito.The implemented cache has to be referenced in OIDC options via the "TokenValidationParameters" property as follows.

      OpenIdConnectOptions openIdConnectOptions = new OpenIdConnectOptions
      {
          AutomaticAuthenticate = true,
          ... // other configuration properties follow..
          TokenValidationParameters = new TokenValidationParameters
          {
              TokenReplayCache = new TokenReplayCache(/*Inject your cache provider*/);
          }
      }
      

      Per verificare l'efficacia di questa configurazione, accedere all'applicazione locale protetta da OIDC e acquisire la richiesta all'endpoint "/signin-oidc" in Fiddler.Please note that to test the effectiveness of this configuration, login into your local OIDC-protected application and capture the request to "/signin-oidc" endpoint in fiddler. In assenza di protezione, la riproduzione di questa richiesta in Fiddler imposta un nuovo cookie di sessione.When the protection is not in place, replaying this request in fiddler will set a new session cookie. Quando la richiesta viene riprodotta dopo aver aggiunto la protezione TokenReplayCache, l'applicazione genera un'eccezione simile alla seguente: SecurityTokenReplayDetectedException: IDX10228: The securityToken has previously been validated, securityToken: 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik1uQ19WWmNBVGZNNXBPWWlKSE1iYTlnb0VLWSIsImtpZCI6Ik1uQ1......When the request is replayed after the TokenReplayCache protection is added, the application will throw an exception as follows: SecurityTokenReplayDetectedException: IDX10228: The securityToken has previously been validated, securityToken: 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik1uQ19WWmNBVGZNNXBPWWlKSE1iYTlnb0VLWSIsImtpZCI6Ik1uQ1......

      Usare librerie ADAL per gestire le richieste di token da client OAuth2 in AAD o in Active Directory localeUse ADAL libraries to manage token requests from OAuth2 clients to AAD (or on-premises AD)

      TitoloTitle DettagliDetails
      ComponenteComponent Azure ADAzure AD
      Fase SDLSDL Phase CompilareBuild
      Tecnologie applicabiliApplicable Technologies GenericoGeneric
      Attributes (Attributi) (Attributi)Attributes N/DN/A
      RiferimentiReferences ADALADAL
      PassaggiSteps

      Azure AD Authentication Library (ADAL) consente agli sviluppatori di applicazioni client di autenticare facilmente gli utenti in Active Directory locale o nel cloud e quindi di ottenere token di accesso per proteggere le chiamate API.The Azure AD authentication Library (ADAL) enables client application developers to easily authenticate users to cloud or on-premises Active Directory (AD), and then obtain access tokens for securing API calls.

      Azure AD Authentication Library offre numerose funzionalità che semplificano l'integrazione dell'autenticazione nelle applicazioni da parte degli sviluppatori, ad esempio il supporto asincrono, la cache di token configurabile per l'archiviazione dei token di accesso e dei token di aggiornamento e l'aggiornamento automatico dei token alla scadenza dei token di accesso, i token di aggiornamento e altre ancora.ADAL has many features that make authentication easier for developers, such as asynchronous support, a configurable token cache that stores access tokens and refresh tokens, automatic token refresh when an access token expires and a refresh token is available, and more.

      Poiché Azure AD Authentication Library gestisce la maggior parte della complessità, gli sviluppatori possono concentrarsi sulla logica di business nell'applicazione e di proteggere le risorse pur non avendo competenze elevate in termini di sicurezza.By handling most of the complexity, ADAL can help a developer focus on business logic in their application and easily secure resources without being an expert on security. Sono disponibili librerie separate per .NET, JavaScript (client e Node.js), iOS, Android e Java.Separate libraries are available for .NET, JavaScript (client and Node.js), iOS, Android and Java.

      Autenticare dispositivi che si connettono al gateway sul campoAuthenticate devices connecting to the Field Gateway

      TitoloTitle DettagliDetails
      ComponenteComponent Gateway IoT sul campoIoT Field Gateway
      Fase SDLSDL Phase CompilareBuild
      Tecnologie applicabiliApplicable Technologies GenericoGeneric
      Attributes (Attributi) (Attributi)Attributes N/DN/A
      RiferimentiReferences N/DN/A
      PassaggiSteps Assicurarsi che ogni dispositivo venga autenticato dal gateway sul campo prima di accettare dati dal dispositivo e prima di agevolare le comunicazioni upstream con il gateway cloud.Ensure that each device is authenticated by the Field Gateway before accepting data from them and before facilitating upstream communications with the Cloud Gateway. Assicurarsi anche che i dispositivi si connettano con credenziali per dispositivo, in modo che sia possibile identificare i singoli dispositivi in modo univoco.Also, ensure that devices connect with a per device credential so that individual devices can be uniquely identified.

      Assicurarsi che i dispositivi che si connettono al gateway cloud vengano autenticatiEnsure that devices connecting to Cloud gateway are authenticated

      TitoloTitle DettagliDetails
      ComponenteComponent Gateway IoT cloudIoT Cloud Gateway
      Fase SDLSDL Phase CompilareBuild
      Tecnologie applicabiliApplicable Technologies Generico, C#, Node.jsGeneric, C#, Node.JS,
      Attributes (Attributi) (Attributi)Attributes N/A, opzione gateway: Hub IoT di AzureN/A, Gateway choice - Azure IoT Hub
      RiferimentiReferences N/A, Hub IoT di Azure con .NET, Introduzione all'hub IoT e Node.js, Proteggere l'hub IoT con certificati e firma di accesso condiviso, Repository GitN/A, Azure IoT hub with .NET, Getting Started wih IoT hub and Node JS, Securing IoT with SAS and certificates, Git repository
      PassaggiSteps
      • Generico: il dispositivo viene autenticato tramite Transport Layer Security (TLS) o IPSec.Generic: Authenticate the device using Transport Layer Security (TLS) or IPSec. L'infrastruttura deve supportare l'uso di una chiave precondivisa (PSK) nei dispositivi che non riescono a gestire la crittografia asimmetrica completa.Infrastructure should support using pre-shared key (PSK) on those devices that cannot handle full asymmetric cryptography. Usare Azure AD, OAuth.Leverage Azure AD, Oauth.
      • C#: quando si crea un'istanza di DeviceClient, per impostazione predefinita il metodo Create crea un'istanza di DeviceClient che usa il protocollo AMQP per comunicare con l'hub IoT.C#: When creating a DeviceClient instance, by default, the Create method creates a DeviceClient instance that uses the AMQP protocol to communicate with IoT Hub. Per usare il protocollo HTTPS, usare l'override del metodo Create che consente di specificare il protocollo.To use the HTTPS protocol, use the override of the Create method that enables you to specify the protocol. Se si usa il protocollo HTTPS, è necessario aggiungere al progetto anche il pacchetto NuGet Microsoft.AspNet.WebApi.Client per includere lo spazio dei nomi System.Net.Http.Formatting.If you use the HTTPS protocol, you should also add the Microsoft.AspNet.WebApi.Client NuGet package to your project to include the System.Net.Http.Formatting namespace.

      EsempioExample

      static DeviceClient deviceClient;
      
      static string deviceKey = "{device key}";
      static string iotHubUri = "{iot hub hostname}";
      
      var messageString = "{message in string format}";
      var message = new Message(Encoding.ASCII.GetBytes(messageString));
      
      deviceClient = DeviceClient.Create(iotHubUri, new DeviceAuthenticationWithRegistrySymmetricKey("myFirstDevice", deviceKey));
      
      await deviceClient.SendEventAsync(message);
      

      EsempioExample

      Node.js: autenticazioneNode.JS: Authentication

      Chiave simmetricaSymmetric key

      • Creare un hub IoT in AzureCreate a IoT hub on azure
      • Creare una voce nel registro delle identità dei dispositiviCreate an entry in the device identity registry javascript var device = new iothub.Device(null); device.deviceId = <DeviceId > registry.create(device, function(err, deviceInfo, res) {})
      • Creare un dispositivo simulatoCreate a simulated device javascript var clientFromConnectionString = require('azure-iot-device-amqp').clientFromConnectionString; var Message = require('azure-iot-device').Message; var connectionString = 'HostName=<HostName>DeviceId=<DeviceId>SharedAccessKey=<SharedAccessKey>'; var client = clientFromConnectionString(connectionString); #### Token di firma di accesso condivisoSAS Token
      • Viene generato internamente quando si usa una chiave simmetrica, ma è anche possibile generarlo e usarlo in modo esplicitoGets internally generated when using symmetric key but we can generate and use it explicitly as well
      • Definire un protocollo: var Http = require('azure-iot-device-http').Http;Define a protocol : var Http = require('azure-iot-device-http').Http;
      • Creare un token di firma di accesso condiviso:Create a sas token : ```javascript resourceUri = encodeURIComponent(resourceUri.toLowerCase()).toLowerCase(); var deviceName = ""; var expires = (Date.now() / 1000) + expiresInMins * 60; var toSign = resourceUri + '\n' + expires; // using crypto var decodedPassword = new Buffer(signingKey, 'base64').toString('binary'); const hmac = crypto.createHmac('sha256', decodedPassword); hmac.update(toSign); var base64signature = hmac.digest('base64'); var base64UriEncoded = encodeURIComponent(base64signature); // construct authorization string var token = "SharedAccessSignature sr=" + resourceUri + "%2fdevices%2f"+deviceName+"&sig="
        • base64UriEncoded + "&se=" + expires; if (policyName) token += "&skn="+policyName; return token; ```
      • Connettersi tramite un token di firma di accesso condiviso:Connect using sas token: javascript Client.fromSharedAccessSignature(sas, Http); #### CertificatiCertificates
      • Generare un certificato X.509 autofirmato con qualsiasi strumento, ad esempio OpenSSL, per generare file CERT e KEY in cui archiviare, rispettivamente, il certificato e la chiaveGenerate a self signed X509 certificate using any tool such as OpenSSL to generate a .cert and .key files to store the certificate and the key respectively
      • Effettuare il provisioning di un dispositivo che accetta connessioni protette tramite i certificatiProvision a device that accepts secured connection using certificates. javascript var connectionString = '<connectionString>'; var registry = iothub.Registry.fromConnectionString(connectionString); var deviceJSON = {deviceId:"<deviceId>", authentication: { x509Thumbprint: { primaryThumbprint: "<PrimaryThumbprint>", secondaryThumbprint: "<SecondaryThumbprint>" } }} var device = deviceJSON; registry.create(device, function (err) {});
      • Connettere un dispositivo usando un certificatoConnect a device using a certificate javascript var Protocol = require('azure-iot-device-http').Http; var Client = require('azure-iot-device').Client; var connectionString = 'HostName=<HostName>DeviceId=<DeviceId>x509=true'; var client = Client.fromConnectionString(connectionString, Protocol); var options = { key: fs.readFileSync('./key.pem', 'utf8'), cert: fs.readFileSync('./server.crt', 'utf8') }; // Calling setOptions with the x509 certificate and key (and optionally, passphrase) will configure the client //transport to use x509 when connecting to IoT Hub client.setOptions(options); //call fn to execute after the connection is set up client.open(fn);

      Usare credenziali di autenticazione per dispositivoUse per-device authentication credentials

      TitoloTitle DettagliDetails
      ComponenteComponent Gateway IoT cloudIoT Cloud Gateway
      Fase SDLSDL Phase CompilareBuild
      Tecnologie applicabiliApplicable Technologies GenericoGeneric
      Attributes (Attributi) (Attributi)Attributes Opzione gateway: Hub IoT di AzureGateway choice - Azure IoT Hub
      RiferimentiReferences Token di sicurezza dell'hub IoT di AzureAzure IoT Hub Security Tokens
      PassaggiSteps Usare credenziali di autenticazione per dispositivo tramite token di firma di accesso condiviso basati sulla chiave del dispositivo o sul certificato client, anziché criteri di accesso condiviso a livello di hub IoT.Use per device authentication credentials using SaS tokens based on Device key or Client Certificate, instead of IoT Hub-level shared access policies. Questo permette di prevenire il riutilizzo dei token di autenticazione di un dispositivo o di un gateway sul campo da parte di altri.This prevents the reuse of authentication tokens of one device or field gateway by another

      Assicurarsi che l'accesso in lettura anonimo venga concesso solo ai contenitori e ai BLOB necessariEnsure that only the required containers and blobs are given anonymous read access

      TitoloTitle DettagliDetails
      ComponenteComponent Archiviazione di AzureAzure Storage
      Fase SDLSDL Phase CompilareBuild
      Tecnologie applicabiliApplicable Technologies GenericoGeneric
      Attributes (Attributi) (Attributi)Attributes Tipo di archiviazione: BLOBStorageType - Blob
      RiferimentiReferences Gestire l'accesso in lettura anonimo a contenitori e BLOB, Firme di accesso condiviso, parte 1: informazioni sul modello di firma di accesso condivisoManage anonymous read access to containers and blobs, Shared Access Signatures, Part 1: Understanding the SAS model
      PassaggiSteps

      Per impostazione predefinita, solo il proprietario dell'account di archiviazione può accedere a un contenitore e ai BLOB in esso contenuti.By default, a container and any blobs within it may be accessed only by the owner of the storage account. Per concedere a utenti anonimi autorizzazioni di lettura per un contenitore e i relativi BLOB, è possibile impostare le autorizzazioni del contenitore per consentire l'accesso pubblico.To give anonymous users read permissions to a container and its blobs, one can set the container permissions to allow public access. Gli utenti anonimi possono leggere i BLOB presenti in un contenitore accessibile pubblicamente senza effettuare l'autenticazione della richiesta.Anonymous users can read blobs within a publicly accessible container without authenticating the request.

      I contenitori forniscono le seguenti opzioni per la gestione dell'accesso al contenitore:Containers provide the following options for managing container access:

      • Accesso in lettura pubblico completo: i dati del BLOB e del contenitore possono essere letti tramite richiesta anonima.Full public read access: Container and blob data can be read via anonymous request. I client possono enumerare i BLOB all'interno del contenitore tramite richiesta anonima, ma non sono in grado di enumerare i contenitori all'interno dell'account di archiviazione.Clients can enumerate blobs within the container via anonymous request, but cannot enumerate containers within the storage account.
      • Accesso in lettura pubblico solo per i BLOB: i dati del BLOB all'interno del contenitore possono essere letti tramite richiesta anonima, ma i dati del contenitore non sono disponibili.Public read access for blobs only: Blob data within this container can be read via anonymous request, but container data is not available. I client non possono enumerare i BLOB all'interno del contenitore tramite richiesta anonima.Clients cannot enumerate blobs within the container via anonymous request
      • Nessun accesso in lettura pubblico: i dati del BLOB e del contenitore possono essere letti solo dal proprietario dell'account.No public read access: Container and blob data can be read by the account owner only

      L'accesso anonimo è ideale per scenari in cui alcuni BLOB devono essere sempre disponibili per l'accesso in lettura anonimo.Anonymous access is best for scenarios where certain blobs should always be available for anonymous read access. Per un controllo più capillare, è possibile creare una firma di accesso condiviso, che permette di delegare l'accesso limitato con autorizzazioni diverse e per un intervallo di tempo specificato.For finer-grained control, one can create a shared access signature, which enables to delegate restricted access using different permissions and over a specified time interval. Assicurarsi che non venga assegnato per errore l'accesso anonimo a contenitori e BLOB, che possono contenere dati sensibili.Ensure that containers and blobs, which may potentially contain sensitive data, are not given anonymous access accidentally

      Concedere l'accesso limitato agli oggetti in Archiviazione di Azure tramite la firma di accesso condiviso o criteri di accesso archiviatiGrant limited access to objects in Azure storage using SAS or SAP

      TitoloTitle DettagliDetails
      ComponenteComponent Archiviazione di AzureAzure Storage
      Fase SDLSDL Phase CompilareBuild
      Tecnologie applicabiliApplicable Technologies GenericoGeneric
      Attributes (Attributi) (Attributi)Attributes N/DN/A
      RiferimentiReferences Firme di accesso condiviso, parte 1: informazioni sul modello di firma di accesso condiviso, Firme di accesso condiviso, parte 2: creare e usare una firma di accesso condiviso con l'archivio BLOB, Come delegare l'accesso agli oggetti nell'account usando firme di accesso condiviso e criteri di accesso archiviatiShared Access Signatures, Part 1: Understanding the SAS model, Shared Access Signatures, Part 2: Create and use a SAS with Blob storage, How to delegate access to objects in your account using Shared Access Signatures and Stored Access Policies
      PassaggiSteps

      La firma di accesso condiviso è uno strumento efficace per concedere ad altri client un accesso limitato agli oggetti nell'account di archiviazione, senza dover esporre la chiave di accesso dell'account.Using a shared access signature (SAS) is a powerful way to grant limited access to objects in a storage account to other clients, without having to expose account access key. La firma di accesso condiviso è un URI che racchiude nei parametri di query tutte le informazioni necessarie per l'accesso autenticato a una risorsa di archiviazione.The SAS is a URI that encompasses in its query parameters all of the information necessary for authenticated access to a storage resource. Per accedere alle risorse di archiviazione con la firma di accesso condiviso, il client deve solo passare la firma al costruttore o al metodo appropriato.To access storage resources with the SAS, the client only needs to pass in the SAS to the appropriate constructor or method.

      È possibile usare una firma di accesso condiviso quando si desidera fornire l'accesso alle risorse dell'account di archiviazione a un client al quale non si desidera fornire la chiave dell'account.You can use a SAS when you want to provide access to resources in your storage account to a client that can't be trusted with the account key. Le chiavi dell'account di archiviazione includono una chiave primaria e una chiave secondaria, che garantiscono entrambi accesso amministrativo all'account e a tutte le risorse in esso presenti.Your storage account keys include both a primary and secondary key, both of which grant administrative access to your account and all of the resources in it. Se si espone una delle chiavi dell'account, è possibile che l'account venga utilizzato in modo dannoso o non appropriato.Exposing either of your account keys opens your account to the possibility of malicious or negligent use. Le firme di accesso condiviso costituiscono un'alternativa sicura per consentire ad altri client di leggere, scrivere ed eliminare dati nell'account di archiviazione sulla base delle autorizzazioni concesse e senza richiedere la chiave dell'account.Shared access signatures provide a safe alternative that allows other clients to read, write, and delete data in your storage account according to the permissions you've granted, and without need for the account key.

      Se è disponibile un set logico di parametri simili ogni volta, è preferibile usare i criteri di accesso archiviati.If you have a logical set of parameters that are similar each time, using a Stored Access Policy (SAP) is a better idea. Poiché l'uso di una firma di accesso condiviso derivata da criteri di accesso archiviati offre la possibilità di revocare immediatamente la firma di accesso condiviso, è consigliabile usare sempre i criteri di accesso archiviati, quando possibile.Because using a SAS derived from a Stored Access Policy gives you the ability to revoke that SAS immediately, it is the recommended best practice to always use Stored Access Policies when possible.