Proteggere le API usando i certificati
I certificati possono essere usati per offrire l'autenticazione reciproca TLS (Transport Layer Security) tra il client e il gateway API. È possibile configurare il gateway di Gestione API per consentire solo le richieste con certificati che contengono un'identificazione personale specifica. L'autorizzazione a livello di gateway è gestita tramite i criteri in ingresso.
Autenticazione client con Transport Layer Security
Con l'autenticazione client TLS, il gateway di Gestione API può controllare il certificato contenuto all'interno della richiesta del client e verificare le proprietà seguenti:
Proprietà | Descrizione |
---|---|
Autorità di certificazione | Consentire solo i certificati firmati da un'autorità di certificazione specifica |
Identificazione personale | Consentire i certificati contenenti un'identificazione personale specificata |
Argomento | Consentire solo i certificati con un oggetto specificato |
Data di scadenza | Non consentire certificati scaduti |
Queste proprietà non si escludono a vicenda e possono essere usate insieme per formare i propri requisiti dei criteri. Ad esempio, è possibile specificare che il certificato passato nella richiesta è firmato e non è scaduto.
I certificati client vengono firmati per impedire che vengano manomessi. Quando un partner invia un certificato, verificare che provenga dal partner e non da un impostore. Esistono due modi comuni per verificare un certificato:
- Controllare chi ha emesso il certificato. Se l'autorità di certificazione è considerata attendibile, è possibile usare il certificato. Per automatizzare questo processo, è possibile configurare le autorità di certificazione attendibili nel portale di Azure.
- Se il certificato è emesso dal partner, verificare che provenga dal partner. Ad esempio, se il partner distribuisce il certificato di persona, si può essere certi dell'autenticità. Questi certificati sono chiamati certificati autofirmati.
Accettare i certificati client nel livello Consumo
Il livello Consumo in Gestione API è progettato per essere conforme alle entità di sicurezza della progettazione serverless. Se si compilano le API da tecnologie serverless, ad esempio da Funzioni di Azure, questo livello è una scelta ideale. Nel livello Consumo, è necessario abilitare esplicitamente l'uso di certificati client. Questa operazione può essere eseguita nella pagina Domini personalizzati. Questo passaggio non è necessario negli altri livelli.
Criteri di autorizzazione dei certificati
Creare questi criteri nel file dei criteri di elaborazione in ingresso all'interno del gateway di Gestione API:
Controllare l'identificazione personale di un certificato client
Tutti i certificati client includono un'identificazione personale, che è un hash, calcolata in base ad altre proprietà del certificato. L'identificazione personale assicura che i valori del certificato non siano stati alterati dopo l'emissione del certificato da parte dell'autorità di certificazione. È possibile controllare l'identificazione personale nei criteri. L'esempio seguente controlla l'identificazione personale del certificato passato nella richiesta:
<choose>
<when condition="@(context.Request.Certificate == null || context.Request.Certificate.Thumbprint != "desired-thumbprint")" >
<return-response>
<set-status code="403" reason="Invalid client certificate" />
</return-response>
</when>
</choose>
Controllare l'identificazione personale nei certificati caricati in Gestione API
Nell'esempio precedente poiché una sola identificazione personale risulta adatta, verrà convalidato un solo certificato. In genere, ogni cliente o società partner passa un certificato diverso con un'identificazione personale diversa. Per supportare questo scenario, ottenere i certificati dai partner e usare la pagina Certificati client nel portale di Azure per caricarli nella risorsa di Gestione API. Quindi aggiungere il codice seguente ai criteri:
<choose>
<when condition="@(context.Request.Certificate == null || !context.Request.Certificate.Verify() || !context.Deployment.Certificates.Any(c => c.Value.Thumbprint == context.Request.Certificate.Thumbprint))" >
<return-response>
<set-status code="403" reason="Invalid client certificate" />
</return-response>
</when>
</choose>
Controllare l'autorità di certificazione e l'oggetto di un certificato client
L'esempio seguente controlla l'autorità di certificazione e l'oggetto del certificato passato nella richiesta:
<choose>
<when condition="@(context.Request.Certificate == null || context.Request.Certificate.Issuer != "trusted-issuer" || context.Request.Certificate.SubjectName.Name != "expected-subject-name")" >
<return-response>
<set-status code="403" reason="Invalid client certificate" />
</return-response>
</when>
</choose>