SDK поставщика ресурсов MS Azure — аутентификация

Я пытаюсь реализовать аутентификацию MS Azure, описанную здесь:
https://github.com/Azure/azure-resource-provider-sdk/tree/master/docs#authentication
но единственное, что там сказано:

Вы несете ответственность за проверку отпечатка сертификата вызывающего абонента.
Принимайте звонки только с сертификатов, имеющих правильный открытый ключ.

Как это сделать? Желательно в PHP. Заранее спасибо.

0

Решение

Насколько я понимаю, API Resource Provider (RP) является HTTP RESTful, а вот сертификат: https://github.com/Azure/azure-resource-provider-sdk/blob/master/docs/misc/AzureStoreLatest.cer который используется Azure для вызова вашего RP. Для реализации вашей аутентификации RP, которая упоминается на https://github.com/Azure/azure-resource-provider-sdk/tree/master/docs#authentication, Вы можете использовать проверку сертификата, отправленного из запросов на ваш RP. Исходя из моего опыта, обычно мы проверяем серийный номер или отпечаток сертификата для подтверждения его авторизации, официальные образцы которых публикуются на https://github.com/Azure/azure-resource-provider-sdk/tree/master/samples используя тот же способ для проверки сертификата. Например. ниже приведена версия AuthorizeRequest на C # для вашей справки:

    public static bool AuthorizeRequest(X509Certificate2 clientCertificate)
{
if (ConfigurationDataProvider.AzureStoreRequestAuthorization)
{
if (clientCertificate == null || (
// BaltimoreRdfeExtensibilityClientProd.cer, will expire on Saturday, February 14, 2015
!clientCertificate.Thumbprint.Equals("F2693F8487AB975A28C19610A672E59DDCF873F2", StringComparison.OrdinalIgnoreCase) &&

// BaltimoreRdfeExtensibilityClientStage.cer, will expire on Saturday, February 14, 2015
!clientCertificate.Thumbprint.Equals("19D02B07DEC22C0998BB266A7DA5BA8B4D42A0A6", StringComparison.OrdinalIgnoreCase)
))
{
Logger.ErrorFormat(
format  : "Unauthorized access to Azure Store integration endpoints: {0}, {1}",
arg0    : clientCertificate != null ? clientCertificate.Subject     : "<null>",
arg1    : clientCertificate != null ? clientCertificate.Thumbprint  : "<null>");

return false;
}
}

return true;
}

В PHP & OpenSSL, мы можем использовать переменную SSL_CLIENT_M_SERIAL: http://pilif.github.io/2013/07/how-to-accept-ssl-client-certificates/ чтобы получить серийный номер сертификата клиента, затем проверьте, равно ли значение серийному номеру AzureStoreLatest.cer. (вы можете жестко закодировать серийный номер в вашем коде, как в примере C # выше)

введите описание изображения здесь

Я хотел бы указать на некоторые концепции и советы по использованию RP API:

https://github.com/Azure/azure-resource-provider-sdk/blob/master/docs/concepts.md

https://github.com/Azure/azure-resource-provider-sdk/blob/master/docs/tips-and-tricks.md

Если у вас возникнут какие-либо проблемы во время внедрения, пожалуйста, сообщите нам об этом и предоставьте больше информации о том, что вы пробовали.

1

Другие решения

Других решений пока нет …