Zabezpieczanie dostępu do interfejsu API za pomocą certyfikatów klienta
Certyfikaty mogą służyć do zapewnienia wzajemnego uwierzytelniania protokołu TLS między klientem i bramą interfejsów 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.
W przypadku aplikacji meteorologicznej masz niektórych klientów, którzy mają certyfikaty klienta wystawione przez urząd certyfikacji , któremu ufasz. Chcesz umożliwić tym klientom uwierzytelnianie przez przekazanie tych certyfikatów.
W tym miejscu dowiesz się, jak skonfigurować usługę API Management w celu akceptowania certyfikatów klienta.
Uwierzytelnianie klienta protokołu TLS
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 | Przyczyna |
---|---|
Urząd certyfikacji (CA) | Zezwalaj tylko na certyfikaty podpisane przez określony urząd certyfikacji. |
Odcisk palca | Zezwalaj na certyfikaty zawierające określony odcisk palca. |
Temat | Zezwalaj tylko na certyfikaty z określonym podmiotem. |
Data ważności | Zezwalaj tylko na certyfikaty, które nie wygasły. |
Te właściwości nie wykluczają się wzajemnie i można je łączyć w celu utworzenia własnych wymagań dotyczących zasad. Można na przykład określić, że certyfikat przekazany w żądaniu nie wygasł i został podpisany przez określony urząd certyfikacji.
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 pochodzi z niego. Jeśli na przykład certyfikat zostanie dostarczony osobiście, możesz mieć pewność co do jego autentyczności. Te certyfikaty są nazywane certyfikatami z podpisem własnym.
Akceptowanie certyfikatów klienta w warstwie Zużycie
Warstwa Zużycie w usłudze API Management została zaprojektowana pod kątem zgodności z zasadami 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 należy jawnie włączyć użycie certyfikatów klienta, które można wykonać w okienku Domeny niestandardowe. Ten krok nie jest konieczny w innych warstwach.
Tworzenie zasad autoryzacji certyfikatów
Utwórz te zasady 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. Poniższy przykład sprawdza odcisk 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 partnerów i użyj okienka Certyfikaty klienta w witrynie Azure Portal, aby przekazać je do zasobu usługi API Management. Następnie dodaj ten kod do 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
Poniższy przykład sprawdza wystawcę i podmiot 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>