Usar certificados do cliente para proteger o acesso a uma API

Concluído

Os certificados podem ser usados para fornecer autenticação mútua TLS entre o cliente e o gateway de API. Você pode configurar o gateway do Gerenciamento de API para permitir somente solicitações com certificados que contenham uma impressão digital específica. A autorização no nível do gateway é manipulada por meio de políticas de entrada.

Para o aplicativo meteorológico, você tem alguns clientes que têm certificados do cliente emitidos por uma AC (autoridade de certificação) na qual vocês dois confiam. Você deseja permitir que esses clientes se autentiquem passando esses certificados.

Aqui, você aprenderá a configurar o Gerenciamento de API para aceitar certificados do cliente.

Autenticação de cliente TLS

Com a autenticação de cliente TLS, o gateway do Gerenciamento de API pode inspecionar o certificado contido na solicitação do cliente e verificar propriedades como:

Propriedade Motivo
AC (autoridade de certificação) Permitir apenas certificados assinados por uma AC específica.
Impressão Digital Permitir certificados que contenham uma impressão digital especificada.
Assunto Permitir somente certificados com uma entidade especificada.
Data de Validade Permita apenas certificados que não expiraram.

Essas propriedades não são mutuamente exclusivas e podem ser combinadas para formar seus próprios requisitos de política. Por exemplo, você pode especificar que o certificado passado na solicitação não expirou e foi assinado por uma autoridade de certificação específica.

Os certificados do cliente são assinados para garantir que não sejam adulterados. Quando um parceiro enviar um certificado, verifique se ele é proveniente dele e não de um impostor. Há duas maneiras comuns para verificar um certificado:

  • Verificar quem emitiu o certificado. Se o emissor for uma autoridade de certificação confiável, você poderá usar o certificado. Você pode configurar autoridades de certificação confiáveis no portal do Azure para automatizar esse processo.

  • Se o certificado for emitido por um parceiro, verifique se ele é proveniente dele. Por exemplo, se ele entregar o certificado pessoalmente, você poderá ter certeza de sua autenticidade. Eles são conhecidos como certificados autoassinados.

Aceitar certificados do cliente na camada Consumo

A camada Consumo do Gerenciamento de API foi projetada para estar em conformidade com os princípios de design sem servidor. Se você criar suas APIs em tecnologias sem servidor, como o Azure Functions, essa camada será uma boa opção. Na camada Consumo, você precisará habilitar explicitamente o uso de certificados do cliente, o que pode ser feito no painel Domínios personalizados. Essa etapa não é necessária em outras camadas.

Configure the gateway to request certificates.

Criar políticas de autorização de certificado

Crie essas políticas no arquivo de política de processamento de entrada no gateway do Gerenciamento de API.

Inbound processing policy button.

Verificar a impressão digital de um certificado do cliente

Todos os certificados do cliente incluem uma impressão digital, que é um hash, calculado com base em outras propriedades do certificado. A impressão digital garante que os valores no certificado não foram alterados, pois o certificado foi emitido pela autoridade de certificação. Você pode verificar a impressão digital na política. O exemplo a seguir verifica a impressão digital do certificado passado na solicitação.

<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>

Verificar a impressão digital em relação aos certificados carregados no Gerenciamento de API

No exemplo anterior, somente uma impressão digital funcionará e, portanto, apenas um certificado será validado. Normalmente, cada cliente ou empresa parceira passará um certificado diferente com uma impressão digital diferente. Para dar suporte a esse cenário, obtenha os certificados de seus parceiros e use o painel Certificados do cliente no portal do Azure para carregá-los no recurso do Gerenciamento de API. Em seguida, adicione o código à política.

<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>

Verificar o emissor e a entidade de um certificado do cliente

O exemplo a seguir verifica o emissor e a entidade do certificado passado na solicitação.

<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>