Я настраиваю аутентификацию клиента на моем компоненте управления API. Я хочу, чтобы клиенты проходили аутентификацию в моем управлении API, прежде чем они смогут получить доступ к любым API (таким образом, управление API - это сервер, а пользователи API - это клиенты, а НЕ аутентификация клиентов для внутренних служб)
Согласно Microsoft, я могу это сделать (https://docs.microsoft.com/en-us/azure/api-management/api-management-howto-mutual-certificates-for-clients). Однако, когда я пытаюсь проверить отпечаток моего сертификата по всем доверенным сертификатам, которые я загрузил, происходит сбой из-за недействительного сертификата клиента. Я использовал тот же Код политики, предоставляемый Microsoft:
<choose>
<when condition="@(context.Request.Certificate == null || !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>
Теперь, когда я использую для проверки жестко закодированный отпечаток большого пальца, это успешно выполняется:
<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>
Я загружаю свой сертификат клиента в сертификаты CA. Я не могу загрузить его в клиентские сертификаты на управление API, потому что у меня нет закрытого ключа. Их будут иметь только клиенты, и они будут отправлять только свои публичные сертификаты, чтобы я мог загрузить их в свой экземпляр управления API, когда доверяю им.
Я думаю, что политика проверки всех сертификатов может быть неправильной, и она может проверять только сертификаты из моих клиентских сертификатов. Это правильно? И если да, можно ли проверить все сертификаты CA, которые я загрузил в управление API?