Azure::Core::Credentials (#1846)

Co-authored-by: Anton Kolesnyk <antkmsft@users.noreply.github.com>
This commit is contained in:
Anton Kolesnyk 2021-03-10 16:22:10 -08:00 committed by GitHub
parent 2a1ea1f890
commit 865f707532
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
35 changed files with 95 additions and 95 deletions

View File

@ -41,6 +41,8 @@
- Moved types in the `Azure::IO` namespace like `BodyStream` to `Azure::Core::IO`.
- Moved `Azure::Core::ETag` to `Azure::ETag`.
- Moved `Azure::Core::DateTime` to `Azure::DateTime`.
- Renamed `Azure::Core::Http::TokenRequestOptions` to `Azure::Core::Credentials::TokenRequestContext`.
- Moved `AccessToken`, `TokenCredential`, and `AuthenticationException` from `Azure::Core` to `Azure::Core::Credentials` namespace.
### Bug Fixes

View File

@ -16,8 +16,9 @@
#include <mutex>
#include <string>
#include <utility>
#include <vector>
namespace Azure { namespace Core {
namespace Azure { namespace Core { namespace Credentials {
/**
* @brief Represents an access token.
@ -35,9 +36,16 @@ namespace Azure { namespace Core {
DateTime ExpiresOn;
};
namespace Http {
struct TokenRequestOptions;
} // namespace Http
/**
* @brief Defines context for getting token.
*/
struct TokenRequestContext
{
/**
* @brief Authentication scopes.
*/
std::vector<std::string> Scopes;
};
/**
* @brief Token credential.
@ -47,12 +55,12 @@ namespace Azure { namespace Core {
/**
* @brief Get an authentication token.
*
* @param tokenRequestOptions Options to get the token.
* @param tokenRequestContext Context to get the token in.
* @param context #Azure::Core::Context so that operation can be cancelled.
*
*/
virtual AccessToken GetToken(
Http::TokenRequestOptions const& tokenRequestOptions,
TokenRequestContext const& tokenRequestContext,
Context const& context) const = 0;
/// Destructor.
@ -87,4 +95,4 @@ namespace Azure { namespace Core {
*/
char const* what() const noexcept override { return m_message.c_str(); }
};
}} // namespace Azure::Core
}}} // namespace Azure::Core::Credentials

View File

@ -342,26 +342,15 @@ namespace Azure { namespace Core { namespace Http {
Context const& ctx) const override;
};
/**
* @brief Defines options for getting token.
*/
struct TokenRequestOptions
{
/**
* @brief Authentication scopes.
*/
std::vector<std::string> Scopes;
};
/**
* @brief Bearer Token authentication policy.
*/
class BearerTokenAuthenticationPolicy : public HttpPolicy {
private:
std::shared_ptr<TokenCredential const> const m_credential;
TokenRequestOptions m_tokenRequestOptions;
std::shared_ptr<Credentials::TokenCredential const> const m_credential;
Credentials::TokenRequestContext m_tokenRequestContext;
mutable AccessToken m_accessToken;
mutable Credentials::AccessToken m_accessToken;
mutable std::mutex m_accessTokenMutex;
BearerTokenAuthenticationPolicy(BearerTokenAuthenticationPolicy const&) = delete;
@ -371,19 +360,19 @@ namespace Azure { namespace Core { namespace Http {
/**
* @brief Construct a Bearer Token authentication policy.
*
* @param credential A #Azure::Core::TokenCredential to use with this policy.
* @param tokenRequestOptions #Azure::Core::Http::TokenRequestOptions.
* @param credential An #Azure::Core::TokenCredential to use with this policy.
* @param tokenRequestContext #Azure::Core::Credentials::TokenRequestContext.
*/
explicit BearerTokenAuthenticationPolicy(
std::shared_ptr<TokenCredential const> credential,
TokenRequestOptions tokenRequestOptions)
: m_credential(std::move(credential)), m_tokenRequestOptions(std::move(tokenRequestOptions))
std::shared_ptr<Credentials::TokenCredential const> credential,
Credentials::TokenRequestContext tokenRequestContext)
: m_credential(std::move(credential)), m_tokenRequestContext(std::move(tokenRequestContext))
{
}
std::unique_ptr<HttpPolicy> Clone() const override
{
return std::make_unique<BearerTokenAuthenticationPolicy>(m_credential, m_tokenRequestOptions);
return std::make_unique<BearerTokenAuthenticationPolicy>(m_credential, m_tokenRequestContext);
}
std::unique_ptr<RawResponse> Send(

View File

@ -19,7 +19,7 @@ std::unique_ptr<RawResponse> BearerTokenAuthenticationPolicy::Send(
// Refresh the token in 2 or less minutes before the actual expiration.
if (std::chrono::system_clock::now() > (m_accessToken.ExpiresOn - std::chrono::minutes(2)))
{
m_accessToken = m_credential->GetToken(m_tokenRequestOptions, context);
m_accessToken = m_credential->GetToken(m_tokenRequestContext, context);
}
request.SetHeader("authorization", "Bearer " + m_accessToken.Token);

View File

@ -44,7 +44,7 @@ namespace Azure { namespace Identity {
* @brief This class is used by Azure SDK clients to authenticate with the Azure service using a
* tenant ID, client ID and client secret.
*/
class ClientSecretCredential : public Core::TokenCredential {
class ClientSecretCredential : public Core::Credentials::TokenCredential {
private:
std::string m_tenantId;
std::string m_clientId;
@ -70,8 +70,8 @@ namespace Azure { namespace Identity {
{
}
Core::AccessToken GetToken(
Core::Http::TokenRequestOptions const& tokenRequestOptions,
Core::Credentials::AccessToken GetToken(
Core::Credentials::TokenRequestContext const& tokenRequestContext,
Core::Context const& context) const override;
};

View File

@ -17,7 +17,7 @@ namespace Azure { namespace Identity {
/**
* @brief An environment credential.
*/
class EnvironmentCredential : public Core::TokenCredential {
class EnvironmentCredential : public Core::Credentials::TokenCredential {
std::unique_ptr<TokenCredential> m_credentialImpl;
public:
@ -34,8 +34,8 @@ namespace Azure { namespace Identity {
*/
explicit EnvironmentCredential();
Core::AccessToken GetToken(
Core::Http::TokenRequestOptions const& tokenRequestOptions,
Core::Credentials::AccessToken GetToken(
Core::Credentials::TokenRequestContext const& tokenRequestContext,
Core::Context const& context) const override;
};

View File

@ -10,16 +10,17 @@
#include <sstream>
using namespace Azure::Identity;
using namespace Azure::Core::IO;
std::string const Azure::Identity::_detail::g_aadGlobalAuthority
= "https://login.microsoftonline.com/";
Azure::Core::AccessToken ClientSecretCredential::GetToken(
Azure::Core::Http::TokenRequestOptions const& tokenRequestOptions,
Azure::Core::Credentials::AccessToken ClientSecretCredential::GetToken(
Azure::Core::Credentials::TokenRequestContext const& tokenRequestContext,
Azure::Core::Context const& context) const
{
using namespace Azure::Core;
using namespace Azure::Core::Credentials;
using namespace Azure::Core::IO;
using namespace Azure::Core::Http;
using namespace Azure::Core::Http::_internal;
@ -34,7 +35,7 @@ Azure::Core::AccessToken ClientSecretCredential::GetToken(
body << "grant_type=client_credentials&client_id=" << Url::Encode(m_clientId)
<< "&client_secret=" << Url::Encode(m_clientSecret);
auto const& scopes = tokenRequestOptions.Scopes;
auto const& scopes = tokenRequestContext.Scopes;
if (!scopes.empty())
{
auto scopesIter = scopes.begin();

View File

@ -79,11 +79,11 @@ EnvironmentCredential::EnvironmentCredential()
#endif
}
Azure::Core::AccessToken EnvironmentCredential::GetToken(
Azure::Core::Http::TokenRequestOptions const& tokenRequestOptions,
Azure::Core::Credentials::AccessToken EnvironmentCredential::GetToken(
Azure::Core::Credentials::TokenRequestContext const& tokenRequestContext,
Azure::Core::Context const& context) const
{
using namespace Azure::Core;
using namespace Azure::Core::Credentials;
if (!m_credentialImpl)
{
@ -91,5 +91,5 @@ Azure::Core::AccessToken EnvironmentCredential::GetToken(
"Environment variables are not fully configured.");
}
return m_credentialImpl->GetToken(tokenRequestOptions, context);
return m_credentialImpl->GetToken(tokenRequestContext, context);
}

View File

@ -28,8 +28,8 @@ namespace Azure { namespace Identity { namespace Test {
std::string m_tenantId;
std::string m_clientId;
std::string m_secret;
Azure::Core::Http::TokenRequestOptions m_scopes;
std::unique_ptr<Azure::Identity::ClientSecretCredential> m_credentail;
Core::Credentials::TokenRequestContext m_tokenRequestContext;
std::unique_ptr<Azure::Identity::ClientSecretCredential> m_credential;
public:
/**
@ -41,8 +41,8 @@ namespace Azure { namespace Identity { namespace Test {
m_tenantId = m_options.GetMandatoryOption<std::string>("TenantId");
m_clientId = m_options.GetMandatoryOption<std::string>("ClientId");
m_secret = m_options.GetMandatoryOption<std::string>("Secret");
m_scopes.Scopes.push_back(m_options.GetMandatoryOption<std::string>("Scope"));
m_credentail = std::make_unique<Azure::Identity::ClientSecretCredential>(
m_tokenRequestContext.Scopes.push_back(m_options.GetMandatoryOption<std::string>("Scope"));
m_credential = std::make_unique<Azure::Identity::ClientSecretCredential>(
m_tenantId, m_clientId, m_secret);
}
@ -60,7 +60,7 @@ namespace Azure { namespace Identity { namespace Test {
*/
void Run(Azure::Core::Context const& context) override
{
auto t = m_credentail->GetToken(m_scopes, context);
auto t = m_credential->GetToken(m_tokenRequestContext, context);
}
/**

View File

@ -42,7 +42,7 @@ namespace Azure { namespace Security { namespace KeyVault { namespace Keys {
*/
explicit KeyClient(
std::string const& vaultUrl,
std::shared_ptr<Core::TokenCredential const> credential,
std::shared_ptr<Core::Credentials::TokenCredential const> credential,
KeyClientOptions options = KeyClientOptions());
/**

View File

@ -57,7 +57,7 @@ int main()
std::cout << " - " << operation.ToString() << std::endl;
}
}
catch (Azure::Core::AuthenticationException const& e)
catch (Azure::Core::Credentials::AuthenticationException const& e)
{
std::cout << "Authentication Exception happened:" << std::endl << e.what() << std::endl;
}

View File

@ -18,18 +18,18 @@ using namespace Azure::Core::Http;
KeyClient::KeyClient(
std::string const& vaultUrl,
std::shared_ptr<Core::TokenCredential const> credential,
std::shared_ptr<Core::Credentials::TokenCredential const> credential,
KeyClientOptions options)
{
auto apiVersion = options.GetVersionString();
std::vector<std::unique_ptr<HttpPolicy>> perRetrypolicies;
{
Azure::Core::Http::TokenRequestOptions const tokenOptions
Azure::Core::Credentials::TokenRequestContext const tokenContext
= {{"https://vault.azure.net/.default"}};
perRetrypolicies.emplace_back(
std::make_unique<BearerTokenAuthenticationPolicy>(credential, tokenOptions));
std::make_unique<BearerTokenAuthenticationPolicy>(credential, tokenContext));
}
m_pipeline = std::make_shared<Azure::Security::KeyVault::Common::_internal::KeyVaultPipeline>(

View File

@ -31,7 +31,7 @@ namespace Azure { namespace Security { namespace KeyVault { namespace Keys { nam
std::string m_tenantId;
std::string m_clientId;
std::string m_secret;
std::shared_ptr<Azure::Identity::ClientSecretCredential> m_credentail;
std::shared_ptr<Azure::Identity::ClientSecretCredential> m_credential;
std::unique_ptr<Azure::Security::KeyVault::Keys::KeyClient> m_client;
public:
@ -46,10 +46,10 @@ namespace Azure { namespace Security { namespace KeyVault { namespace Keys { nam
m_tenantId = m_options.GetMandatoryOption<std::string>("TenantId");
m_clientId = m_options.GetMandatoryOption<std::string>("ClientId");
m_secret = m_options.GetMandatoryOption<std::string>("Secret");
m_credentail = std::make_shared<Azure::Identity::ClientSecretCredential>(
m_credential = std::make_shared<Azure::Identity::ClientSecretCredential>(
m_tenantId, m_clientId, m_secret);
m_client
= std::make_unique<Azure::Security::KeyVault::Keys::KeyClient>(m_vaultUrl, m_credentail);
= std::make_unique<Azure::Security::KeyVault::Keys::KeyClient>(m_vaultUrl, m_credential);
}
/**

View File

@ -65,7 +65,7 @@ namespace Azure { namespace Storage { namespace Blobs {
*/
explicit AppendBlobClient(
const std::string& blobUrl,
std::shared_ptr<Core::TokenCredential> credential,
std::shared_ptr<Core::Credentials::TokenCredential> credential,
const BlobClientOptions& options = BlobClientOptions());
/**

View File

@ -74,7 +74,7 @@ namespace Azure { namespace Storage { namespace Blobs {
*/
explicit BlobClient(
const std::string& blobUrl,
std::shared_ptr<Core::TokenCredential> credential,
std::shared_ptr<Core::Credentials::TokenCredential> credential,
const BlobClientOptions& options = BlobClientOptions());
/**

View File

@ -62,7 +62,7 @@ namespace Azure { namespace Storage { namespace Blobs {
*/
explicit BlobContainerClient(
const std::string& blobContainerUrl,
std::shared_ptr<Core::TokenCredential> credential,
std::shared_ptr<Core::Credentials::TokenCredential> credential,
const BlobClientOptions& options = BlobClientOptions());
/**

View File

@ -55,7 +55,7 @@ namespace Azure { namespace Storage { namespace Blobs {
*/
explicit BlobServiceClient(
const std::string& serviceUrl,
std::shared_ptr<Core::TokenCredential> credential,
std::shared_ptr<Core::Credentials::TokenCredential> credential,
const BlobClientOptions& options = BlobClientOptions());
/**

View File

@ -75,7 +75,7 @@ namespace Azure { namespace Storage { namespace Blobs {
*/
explicit BlockBlobClient(
const std::string& blobUrl,
std::shared_ptr<Core::TokenCredential> credential,
std::shared_ptr<Core::Credentials::TokenCredential> credential,
const BlobClientOptions& options = BlobClientOptions());
/**

View File

@ -67,7 +67,7 @@ namespace Azure { namespace Storage { namespace Blobs {
*/
explicit PageBlobClient(
const std::string& blobUrl,
std::shared_ptr<Core::TokenCredential> credential,
std::shared_ptr<Core::Credentials::TokenCredential> credential,
const BlobClientOptions& options = BlobClientOptions());
/**

View File

@ -29,7 +29,7 @@ namespace Azure { namespace Storage { namespace Blobs {
AppendBlobClient::AppendBlobClient(
const std::string& blobUrl,
std::shared_ptr<Core::TokenCredential> credential,
std::shared_ptr<Core::Credentials::TokenCredential> credential,
const BlobClientOptions& options)
: BlobClient(blobUrl, std::move(credential), options)
{

View File

@ -73,7 +73,7 @@ namespace Azure { namespace Storage { namespace Blobs {
BlobClient::BlobClient(
const std::string& blobUrl,
std::shared_ptr<Core::TokenCredential> credential,
std::shared_ptr<Core::Credentials::TokenCredential> credential,
const BlobClientOptions& options)
: BlobClient(blobUrl, options)
{
@ -84,11 +84,11 @@ namespace Azure { namespace Storage { namespace Blobs {
m_blobUrl.GetHost(), options.SecondaryHostForRetryReads));
perRetryPolicies.emplace_back(std::make_unique<Storage::_detail::StoragePerRetryPolicy>());
{
Azure::Core::Http::TokenRequestOptions tokenOptions;
tokenOptions.Scopes.emplace_back(Storage::_detail::StorageScope);
Azure::Core::Credentials::TokenRequestContext tokenContext;
tokenContext.Scopes.emplace_back(Storage::_detail::StorageScope);
perRetryPolicies.emplace_back(
std::make_unique<Azure::Core::Http::BearerTokenAuthenticationPolicy>(
credential, tokenOptions));
credential, tokenContext));
}
{
Azure::Core::Http::_internal::ValueOptions valueOptions;

View File

@ -69,7 +69,7 @@ namespace Azure { namespace Storage { namespace Blobs {
BlobContainerClient::BlobContainerClient(
const std::string& blobContainerUrl,
std::shared_ptr<Core::TokenCredential> credential,
std::shared_ptr<Core::Credentials::TokenCredential> credential,
const BlobClientOptions& options)
: BlobContainerClient(blobContainerUrl, options)
{
@ -80,11 +80,11 @@ namespace Azure { namespace Storage { namespace Blobs {
m_blobContainerUrl.GetHost(), options.SecondaryHostForRetryReads));
perRetryPolicies.emplace_back(std::make_unique<Storage::_detail::StoragePerRetryPolicy>());
{
Azure::Core::Http::TokenRequestOptions tokenOptions;
tokenOptions.Scopes.emplace_back(Storage::_detail::StorageScope);
Azure::Core::Credentials::TokenRequestContext tokenContext;
tokenContext.Scopes.emplace_back(Storage::_detail::StorageScope);
perRetryPolicies.emplace_back(
std::make_unique<Azure::Core::Http::BearerTokenAuthenticationPolicy>(
credential, tokenOptions));
credential, tokenContext));
}
{
Azure::Core::Http::_internal::ValueOptions valueOptions;

View File

@ -64,7 +64,7 @@ namespace Azure { namespace Storage { namespace Blobs {
BlobServiceClient::BlobServiceClient(
const std::string& serviceUrl,
std::shared_ptr<Core::TokenCredential> credential,
std::shared_ptr<Core::Credentials::TokenCredential> credential,
const BlobClientOptions& options)
: BlobServiceClient(serviceUrl, options)
{
@ -75,11 +75,11 @@ namespace Azure { namespace Storage { namespace Blobs {
m_serviceUrl.GetHost(), options.SecondaryHostForRetryReads));
perRetryPolicies.emplace_back(std::make_unique<Storage::_detail::StoragePerRetryPolicy>());
{
Azure::Core::Http::TokenRequestOptions tokenOptions;
tokenOptions.Scopes.emplace_back(Storage::_detail::StorageScope);
Azure::Core::Credentials::TokenRequestContext tokenContext;
tokenContext.Scopes.emplace_back(Storage::_detail::StorageScope);
perRetryPolicies.emplace_back(
std::make_unique<Azure::Core::Http::BearerTokenAuthenticationPolicy>(
credential, tokenOptions));
credential, tokenContext));
}
{
Azure::Core::Http::_internal::ValueOptions valueOptions;

View File

@ -33,7 +33,7 @@ namespace Azure { namespace Storage { namespace Blobs {
BlockBlobClient::BlockBlobClient(
const std::string& blobUrl,
std::shared_ptr<Core::TokenCredential> credential,
std::shared_ptr<Core::Credentials::TokenCredential> credential,
const BlobClientOptions& options)
: BlobClient(blobUrl, std::move(credential), options)
{

View File

@ -32,7 +32,7 @@ namespace Azure { namespace Storage { namespace Blobs {
PageBlobClient::PageBlobClient(
const std::string& blobUrl,
std::shared_ptr<Core::TokenCredential> credential,
std::shared_ptr<Core::Credentials::TokenCredential> credential,
const BlobClientOptions& options)
: BlobClient(blobUrl, std::move(credential), options)
{

View File

@ -54,7 +54,7 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
*/
explicit DataLakeDirectoryClient(
const std::string& directoryUrl,
std::shared_ptr<Core::TokenCredential> credential,
std::shared_ptr<Core::Credentials::TokenCredential> credential,
const DataLakeClientOptions& options = DataLakeClientOptions());
/**

View File

@ -55,7 +55,7 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
*/
explicit DataLakeFileClient(
const std::string& fileUrl,
std::shared_ptr<Core::TokenCredential> credential,
std::shared_ptr<Core::Credentials::TokenCredential> credential,
const DataLakeClientOptions& options = DataLakeClientOptions());
/**

View File

@ -56,7 +56,7 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
*/
explicit DataLakeFileSystemClient(
const std::string& fileSystemUrl,
std::shared_ptr<Core::TokenCredential> credential,
std::shared_ptr<Core::Credentials::TokenCredential> credential,
const DataLakeClientOptions& options = DataLakeClientOptions());
/**

View File

@ -56,7 +56,7 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
*/
explicit DataLakePathClient(
const std::string& pathUrl,
std::shared_ptr<Core::TokenCredential> credential,
std::shared_ptr<Core::Credentials::TokenCredential> credential,
const DataLakeClientOptions& options = DataLakeClientOptions());
/**

View File

@ -51,7 +51,7 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
*/
explicit DataLakeServiceClient(
const std::string& serviceUrl,
std::shared_ptr<Core::TokenCredential> credential,
std::shared_ptr<Core::Credentials::TokenCredential> credential,
const DataLakeClientOptions& options = DataLakeClientOptions());
/**

View File

@ -48,7 +48,7 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
DataLakeDirectoryClient::DataLakeDirectoryClient(
const std::string& directoryUrl,
std::shared_ptr<Core::TokenCredential> credential,
std::shared_ptr<Core::Credentials::TokenCredential> credential,
const DataLakeClientOptions& options)
: DataLakePathClient(directoryUrl, credential, options)
{

View File

@ -110,7 +110,7 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
DataLakeFileClient::DataLakeFileClient(
const std::string& fileUrl,
std::shared_ptr<Core::TokenCredential> credential,
std::shared_ptr<Core::Credentials::TokenCredential> credential,
const DataLakeClientOptions& options)
: DataLakePathClient(fileUrl, credential, options)
{

View File

@ -76,7 +76,7 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
DataLakeFileSystemClient::DataLakeFileSystemClient(
const std::string& fileSystemUrl,
std::shared_ptr<Core::TokenCredential> credential,
std::shared_ptr<Core::Credentials::TokenCredential> credential,
const DataLakeClientOptions& options)
: m_fileSystemUrl(fileSystemUrl), m_blobContainerClient(
_detail::GetBlobUrlFromUrl(fileSystemUrl),
@ -90,11 +90,11 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
m_fileSystemUrl.GetHost(), options.SecondaryHostForRetryReads));
perRetryPolicies.emplace_back(std::make_unique<Storage::_detail::StoragePerRetryPolicy>());
{
Azure::Core::Http::TokenRequestOptions tokenOptions;
tokenOptions.Scopes.emplace_back(Storage::_detail::StorageScope);
Azure::Core::Credentials::TokenRequestContext tokenContext;
tokenContext.Scopes.emplace_back(Storage::_detail::StorageScope);
perRetryPolicies.emplace_back(
std::make_unique<Azure::Core::Http::BearerTokenAuthenticationPolicy>(
credential, tokenOptions));
credential, tokenContext));
}
{
Azure::Core::Http::_internal::ValueOptions valueOptions;

View File

@ -114,7 +114,7 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
DataLakePathClient::DataLakePathClient(
const std::string& pathUrl,
std::shared_ptr<Core::TokenCredential> credential,
std::shared_ptr<Core::Credentials::TokenCredential> credential,
const DataLakeClientOptions& options)
: m_pathUrl(pathUrl), m_blobClient(
_detail::GetBlobUrlFromUrl(pathUrl),
@ -128,11 +128,11 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
m_pathUrl.GetHost(), options.SecondaryHostForRetryReads));
perRetryPolicies.emplace_back(std::make_unique<Storage::_detail::StoragePerRetryPolicy>());
{
Azure::Core::Http::TokenRequestOptions tokenOptions;
tokenOptions.Scopes.emplace_back(Storage::_detail::StorageScope);
Azure::Core::Credentials::TokenRequestContext tokenContext;
tokenContext.Scopes.emplace_back(Storage::_detail::StorageScope);
perRetryPolicies.emplace_back(
std::make_unique<Azure::Core::Http::BearerTokenAuthenticationPolicy>(
credential, tokenOptions));
credential, tokenContext));
}
{
Azure::Core::Http::_internal::ValueOptions valueOptions;

View File

@ -117,7 +117,7 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
DataLakeServiceClient::DataLakeServiceClient(
const std::string& serviceUrl,
std::shared_ptr<Core::TokenCredential> credential,
std::shared_ptr<Core::Credentials::TokenCredential> credential,
const DataLakeClientOptions& options)
: m_serviceUrl(serviceUrl), m_blobServiceClient(
_detail::GetBlobUrlFromUrl(serviceUrl),
@ -131,11 +131,11 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
m_serviceUrl.GetHost(), options.SecondaryHostForRetryReads));
perRetryPolicies.emplace_back(std::make_unique<Storage::_detail::StoragePerRetryPolicy>());
{
Azure::Core::Http::TokenRequestOptions tokenOptions;
tokenOptions.Scopes.emplace_back(Storage::_detail::StorageScope);
Azure::Core::Credentials::TokenRequestContext tokenContext;
tokenContext.Scopes.emplace_back(Storage::_detail::StorageScope);
perRetryPolicies.emplace_back(
std::make_unique<Azure::Core::Http::BearerTokenAuthenticationPolicy>(
credential, tokenOptions));
credential, tokenContext));
}
{
Azure::Core::Http::_internal::ValueOptions valueOptions;