Beskyt API'er ved hjælp af certifikater
Certifikater kan bruges til at give TLS (Transport Layer Security) gensidig godkendelse mellem klienten og API-gatewayen. Du kan konfigurere API-administrationsgatewayen til kun at tillade anmodninger med certifikater, der indeholder et bestemt aftryk. Godkendelsen på gatewayniveau håndteres via indgående politikker.
Klientgodkendelse af transportlagssikkerhed
Med TLS-klientgodkendelse kan API-administrationsgatewayen undersøge certifikatet i klientanmodningen og kontrollere, om der er egenskaber som:
| Egenskab | Beskrivelse |
|---|---|
| nøglecenter | Tillad kun certifikater, der er signeret af et bestemt nøglecenter |
| aftryk | Tillad certifikater, der indeholder et angivet aftryk |
| emne | Tillad kun certifikater med et angivet emne |
| udløbsdato | Tillad ikke udløbne certifikater |
Disse egenskaber udelukker ikke hinanden, og de kan blandes sammen for at danne dine egne politikkrav. Du kan f.eks. angive, at det certifikat, der sendes i anmodningen, er signeret og ikke er udløbet.
Klientcertifikater signeres for at sikre, at de ikke ændres. Når en partner sender dig et certifikat, skal du bekræfte, at det kommer fra dem og ikke en bedrager. Der er to almindelige måder at bekræfte et certifikat på:
- Kontrollér, hvem der har udstedt certifikatet. Hvis udstederen var et nøglecenter, du har tillid til, kan du bruge certifikatet. Du kan konfigurere de nøglecentre, der er tillid til, på Azure Portal for at automatisere denne proces.
- Sørg for, at du har tillid til kilden til alle selvsignerede certifikater.
Acceptér klientcertifikater på niveauet Forbrug
Forbrugsniveauet i API Management er designet til at overholde serveruafhængige designprincipper. Hvis du bygger dine API'er ud fra serveruafhængige teknologier, f.eks. Azure Functions, passer dette niveau godt. På niveauet Forbrug skal du eksplicit aktivere brugen af klientcertifikater, som du kan gøre på siden Brugerdefinerede domæner. Dette trin er ikke nødvendigt på andre niveauer.
Politikker for certifikatgodkendelse
Opret disse politikker i den indgående behandlingspolitikfil i API-administrationsgatewayen:
Kontrollér aftrykket af et klientcertifikat
Alle klientcertifikater indeholder et aftryk, som er en hashværdi, beregnet ud fra andre certifikategenskaber. Aftrykket sikrer, at værdierne i certifikatet ikke er blevet ændret, siden certifikatet blev udstedt af nøglecenteret. Du kan kontrollere aftrykket i din politik. I følgende eksempel kontrolleres aftrykket af det certifikat, der er sendt i anmodningen:
<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>
Kontrollér aftrykket i forhold til certifikater, der er uploadet til API Management
I det forrige eksempel fungerer kun ét aftryk, så kun ét certifikat valideres. Normalt vil hver kunde eller partner virksomhed bestå et andet certifikat med et andet aftryk. Hvis du vil understøtte dette scenarie, skal du hente certifikaterne fra dine partnere og bruge siden Klientcertifikater på Azure Portal til at uploade dem til API Management-ressourcen. Føj derefter denne kode til din politik:
<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>
Kontrollér udstederen og emnet for et klientcertifikat
I dette eksempel kontrolleres udstederen og emnet for det certifikat, der er sendt i anmodningen:
<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>