Zabezpieczanie interfejsów API przy użyciu certyfikatów
Certyfikaty mogą służyć do zapewnienia wzajemnego uwierzytelniania protokołu Transport Layer Security (TLS) między klientem a bramą interfejsu API. Bramę usługi API Management można skonfigurować w taki sposób, aby zezwalała tylko na żądania z certyfikatami zawierającymi określony odcisk palca. Autoryzacja na poziomie bramy jest obsługiwana za pomocą zasad ruchu przychodzącego.
Uwierzytelnianie klienta usługi Transport Layer Security
Korzystając z uwierzytelniania klienta protokołu TLS, brama usługi API Management może sprawdzić certyfikat zawarty w żądaniu klienta pod kątem właściwości, takich jak:
Właściwości | opis |
---|---|
Urząd certyfikacji (CA) | Dozwolone są tylko certyfikaty podpisane przez konkretny urząd CA |
Odcisk palca | Dozwolone są certyfikaty zawierające określony odcisk palca |
Temat | Dozwolone są certyfikaty tylko z określonym podmiotem |
Data ważności | Nie zezwalaj na wygasłe certyfikaty |
Te właściwości nie wykluczają się wzajemnie i mogą być mieszane razem w celu utworzenia własnych wymagań dotyczących zasad. Można na przykład określić, że certyfikat przekazany w żądaniu jest podpisany i nie wygasł.
Certyfikaty klienta są podpisane, aby upewnić się, że nie zostały naruszone. Gdy partner wysyła do Ciebie certyfikat, upewnij się, że pochodzi on od niego, a nie od oszusta. Istnieją dwa podstawowe sposoby weryfikacji certyfikatu:
- Sprawdź, kto wystawił certyfikat. Jeśli wystawcą jest zaufany urząd certyfikacji, możesz użyć tego certyfikatu. Zaufane urzędy certyfikacji można skonfigurować w witrynie Azure Portal, aby zautomatyzować ten proces.
- Jeśli certyfikat jest wystawiony przez partnera, sprawdź, czy na pewno pochodzi od niego. Jeśli na przykład certyfikat zostanie dostarczony osobiście, możesz mieć pewność co do jego autentyczności. Są one określane jako certyfikaty z podpisem własnym.
Akceptowanie certyfikatów klienta w warstwie Zużycie
Warstwa Zużycie w usłudze API Management musi spełniać zasady projektowania bezserwerowego. Jeśli tworzysz swoje interfejsy API w technologii bezserwerowej, takiej jak Azure Functions, ta warstwa jest dobrym rozwiązaniem. W warstwie Zużycie musisz jawnie włączyć korzystanie z certyfikatów klienta. Możesz to zrobić na stronie Domeny niestandardowe. Ten krok nie jest konieczny w innych warstwach.
Zasady autoryzacji certyfikatu
Te zasady są tworzone w pliku zasad przetwarzania ruchu przychodzącego w bramie usługi API Management:
Sprawdzanie odcisku palca certyfikatu klienta
Każdy certyfikat klienta zawiera odcisk palca, czyli skrót obliczany na podstawie innych właściwości certyfikatu. Odcisk palca gwarantuje, że wartości w certyfikacie nie zostały zmienione od czasu wystawienia certyfikatu przez urząd certyfikacji. Odcisk palca można sprawdzić w zasadach. W poniższym przykładzie następuje sprawdzenie odcisku palca certyfikatu przekazanego w żądaniu:
<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>
Sprawdzanie odcisku palca względem certyfikatów przekazanych do usługi API Management
W poprzednim przykładzie korzystano tylko z jednego odcisku palca, dlatego zweryfikowany mógł zostać tylko jeden certyfikat. Zwykle poszczególni klienci lub firmy partnerskie przekazują różne certyfikaty z różnymi odciskami palca. Aby obsłużyć ten scenariusz, uzyskaj certyfikaty od swoich partnerów i na stronie Certyfikaty klienta w witrynie Azure Portal przekaż je do zasobu usługi API Management. Następnie dodaj następujący kod do swoich zasad:
<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>
Sprawdzanie wystawcy i podmiotu certyfikatu klienta
W tym przykładzie następuje sprawdzenie wystawcy i podmiotu certyfikatu przekazanego w żądaniu:
<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>