This commit is contained in:
Victor Vazquez 2022-04-14 07:31:01 +00:00
parent 8b03735e83
commit 2a4f62d88f
3 changed files with 38 additions and 27 deletions

View File

@ -27,25 +27,30 @@ using namespace Azure::Core::Http::Policies::_internal;
using namespace Azure::Core::Http::_internal;
#if defined(BUILD_TRANSPORT_WINHTTP_ADAPTER)
// Whenever winHTTP transport is built, create a policy to make request with no client certificate for attestation requests
// Whenever winHTTP transport is built, create a policy to make request with no client certificate
// for attestation requests
#include "azure/core/http/win_http_transport.hpp"
namespace {
class SetNoClientCertificatePolicy : public Azure::Core::Http::Policies::HttpPolicy {
public:
std::unique_ptr<Azure::Core::Http::Policies::HttpPolicy> Clone() const override
{
return std::make_unique<SetNoClientCertificatePolicy>();
}
class SetNoClientCertificatePolicy : public Azure::Core::Http::Policies::HttpPolicy {
public:
std::unique_ptr<Azure::Core::Http::Policies::HttpPolicy> Clone() const override
{
return std::make_unique<SetNoClientCertificatePolicy>();
}
std::unique_ptr<Azure::Core::Http::RawResponse> Send(
Azure::Core::Http::Request& request,
Azure::Core::Http::Policies::NextHttpPolicy nextHttpPolicy,
const Azure::Core::Context& ctx) const override {
return nextHttpPolicy.Send(request, Azure::Core::Http::_internal::WinHttpTransportContextProvider::GetNoClientCertificateContext(ctx));
}
};
}
std::unique_ptr<Azure::Core::Http::RawResponse> Send(
Azure::Core::Http::Request& request,
Azure::Core::Http::Policies::NextHttpPolicy nextHttpPolicy,
const Azure::Core::Context& ctx) const override
{
return nextHttpPolicy.Send(
request,
Azure::Core::Http::_internal::WinHttpTransportContextProvider::
GetNoClientCertificateContext(ctx));
}
};
} // namespace
#endif
AttestationClient::AttestationClient(
@ -67,11 +72,11 @@ AttestationClient::AttestationClient(
}
m_apiVersion = options.Version.ToString();
std::vector<std::unique_ptr<HttpPolicy>> perCallpolicies;
#if defined(BUILD_TRANSPORT_WINHTTP_ADAPTER)
#if defined(BUILD_TRANSPORT_WINHTTP_ADAPTER)
// This configuration will make winHTTP to disable client certificate for all attestation requests
perCallpolicies.emplace_back(std::make_unique<SetNoClientCertificatePolicy>());
#endif
#endif
m_pipeline = std::make_shared<Azure::Core::Http::_internal::HttpPipeline>(
options,

View File

@ -145,13 +145,13 @@ namespace Azure { namespace Core { namespace Http {
*
*/
class WinHttpTransportContextProvider {
public:
// Factory with no constructor
WinHttpTransportContextProvider() = delete;
public:
// Factory with no constructor
WinHttpTransportContextProvider() = delete;
// Creates a set up token to make
static Azure::Core::Context GetNoClientCertificateContext(Azure::Core::Context const& parent);
static bool HasNoClientCertificateConfiguration(Azure::Core::Context const& context);
// Creates a set up token to make
static Azure::Core::Context GetNoClientCertificateContext(Azure::Core::Context const& parent);
static bool HasNoClientCertificateConfiguration(Azure::Core::Context const& context);
};
} // namespace _internal

View File

@ -200,11 +200,16 @@ Azure::Core::Context::Key NoClientCertificateConfiguration;
} // namespace
Azure::Core::Context Azure::Core::Http::_internal::WinHttpTransportContextProvider::GetNoClientCertificateContext(Azure::Core::Context const& parent) {
Azure::Core::Context
Azure::Core::Http::_internal::WinHttpTransportContextProvider::GetNoClientCertificateContext(
Azure::Core::Context const& parent)
{
return parent.WithValue(NoClientCertificateConfiguration, true);
}
bool Azure::Core::Http::_internal::WinHttpTransportContextProvider::HasNoClientCertificateConfiguration(Azure::Core::Context const& context) {
bool Azure::Core::Http::_internal::WinHttpTransportContextProvider::
HasNoClientCertificateConfiguration(Azure::Core::Context const& context)
{
bool value = false;
context.TryGetValue<bool>(NoClientCertificateConfiguration, value);
return value;
@ -355,7 +360,8 @@ void WinHttpTransport::CreateRequestHandle(std::unique_ptr<_detail::HandleManage
}
// Option is set up by context settings only and is only available for SDK clients
if(m_noClientCert) {
if (m_noClientCert)
{
// If the service requests TLS client certificates, we want to let the WinHTTP APIs know that
// it's ok to initiate the request without a client certificate.
//