Utilizar certificados de cliente para proteger o acesso a uma API
Os certificados podem ser utilizados para fornecer autenticação mútua entre o cliente e o gateway de API. Pode configurar o gateway de Gestão de API para permitir apenas os pedidos com certificados que contêm um thumbprint específico. A autorização ao nível do gateway é processada através de políticas de entrada.
Para seu aplicativo meteorológico, você tem alguns clientes que têm certificados de cliente emitidos por uma autoridade de certificação (CA) em que ambos confiam. Quer permitir que esses clientes façam a autenticação ao transmitir esses certificados.
Aqui, você aprenderá como configurar o Gerenciamento de API para aceitar certificados de cliente.
Autenticação de cliente TLS
Com a autenticação de cliente TLS, o gateway da Gestão de API pode inspecionar o certificado contido no pedido do cliente e verificar propriedades como:
Property | Razão |
---|---|
Autoridade de Certificação (AC) | Permita apenas certificados assinados por uma autoridade de certificação específica. |
Thumbprint | Permitir certificados que contenham uma impressão digital especificada. |
Assunto | Permita apenas certificados com um assunto especificado. |
Data de Expiração | 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 de cliente são assinados para garantir que não sejam adulterados. Quando um parceiro enviar um certificado, verifique se é proveniente do mesmo e não de um impostor. Existem duas formas comuns de verificar um certificado:
Verifique quem emitiu o certificado. Se o emissor tiver sido uma autoridade de certificação em que confia, pode utilizar o certificado. Pode configurar as autoridades de certificação de confiança no portal do Azure para automatizar este processo.
Se o certificado for emitido por um parceiro, verifique se veio dele. Por exemplo, se o parceiro entregar o certificado em pessoa, pode ter certeza da respetiva autenticidade. Esses certificados são conhecidos como certificados autoassinados.
Aceitar certificados de cliente na camada de Consumo
A camada Consumo no Gerenciamento de API foi projetada para estar em conformidade com os princípios de design sem servidor. Se criar as suas APIs a partir de tecnologias sem servidor, como as Funções do Azure, este escalão é uma boa opção. Na camada Consumo, você deve habilitar explicitamente o uso de certificados de cliente, o que pode ser feito no painel Domínios personalizados. Esta etapa não é necessária em outras camadas.
Criar políticas de autorização de certificado
Crie essas políticas no arquivo de política de processamento de entrada no gateway de Gerenciamento de API.
Verificar o thumbprint de um certificado de cliente
Todos os certificados de cliente incluem um thumbprint, que é um hash, calculado a partir de outras propriedades de certificação. A impressão digital garante que os valores no certificado não foram alterados desde que o certificado foi emitido pela autoridade de certificação. Pode verificar o thumbprint na sua 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 o thumbprint com base nos certificados carregados para a Gestão de API
No exemplo anterior, apenas um thumbprint podia funcionar, pelo que só um certificado podia ser validado. Normalmente, cada cliente ou empresa parceira transmitiria um certificado diferente com um thumbprint diferente. Para dar suporte a esse cenário, obtenha os certificados de seus parceiros e use o painel Certificados de cliente no portal do Azure para carregá-los no recurso de Gerenciamento de API. Em seguida, adicione este código à sua 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 assunto de certificado de cliente
O exemplo a seguir verifica o emissor e o assunto 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>