Usare i certificati client per proteggere l'accesso a un'API

Completato

I certificati possono essere usati per offrire l'autenticazione reciproca TLS 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.

Per l'app del meteo, alcuni clienti hanno certificati client emessi da un'autorità di certificazione (CA) considerata attendibile. Si vuole consentire ai clienti di eseguire l'autenticazione passando questo tipo di certificati.

Di seguito viene descritto come configurare Gestione API per accettare i certificati client.

Autenticazione client TLS

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à Motivo
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 Consentire solo i certificati non scaduti.

Queste proprietà non si escludono a vicenda e possono essere combinate per formare requisiti dei criteri personalizzati. Ad esempio, si può specificare che il certificato passato nella richiesta non è scaduto ed è firmato da un'autorità di certificazione specifica.

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 da un 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 detti certificati autofirmati.

Accettare i certificati client nel livello Consumo

Il livello Consumo in Gestione API è progettato per essere conforme ai principi di 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 nel riquadro Domini personalizzati. Questo passaggio non è necessario negli altri livelli.

Configurare il gateway per richiedere i certificati.

Creare criteri di autorizzazione dei certificati

Creare questi criteri nel file dei criteri di elaborazione in ingresso all'interno del gateway di Gestione API.

Pulsante dei criteri Elaborazione in ingresso.

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 il riquadro Certificati client nel portale di Azure per caricarli nella risorsa Gestione API. Aggiungere quindi 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>