Zabezpieczanie dostępu do interfejsu API za pomocą certyfikatów klienta

Ukończone

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.

Skonfiguruj bramę do żądania certyfikatów.

Tworzenie zasad autoryzacji certyfikatów

Utwórz te zasady w pliku zasad przetwarzania ruchu przychodzącego w bramie usługi API Management.

Przycisk zasad przetwarzania ruchu przychodzącego.

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>