Different storage service has its own sas version(sv) (#3380)
This commit is contained in:
parent
f628269290
commit
0af72dfa58
@ -5,6 +5,7 @@
|
||||
### Features Added
|
||||
|
||||
- Bumped up API version to `2020-08-04`.
|
||||
- Bumped up SAS token version to `2020-08-04`.
|
||||
- Added support for immutability policy.
|
||||
- New API: `BlobClient::CopyFromUri()`, `BlobClient::SetImmutabilityPolicy()`, `BlobClient::DeleteImmutabilityPolicy()`, `BlobClient::SetLegalHold()`, `BlockBlobClient::UploadFromUri()` and `BlobServiceClient::RenameBlobContainer()`.
|
||||
- Added lease access condition support for `BlobClient::SetTags()` and `BlobClient::GetTags()`.
|
||||
|
||||
@ -11,6 +11,8 @@
|
||||
namespace Azure { namespace Storage { namespace Sas {
|
||||
|
||||
namespace {
|
||||
constexpr static const char* SasVersion = "2020-08-04";
|
||||
|
||||
std::string BlobSasResourceToString(BlobSasResource resource)
|
||||
{
|
||||
if (resource == BlobSasResource::BlobContainer)
|
||||
@ -151,17 +153,16 @@ namespace Azure { namespace Storage { namespace Sas {
|
||||
|
||||
std::string stringToSign = Permissions + "\n" + startsOnStr + "\n" + expiresOnStr + "\n"
|
||||
+ canonicalName + "\n" + Identifier + "\n" + (IPRange.HasValue() ? IPRange.Value() : "")
|
||||
+ "\n" + protocol + "\n" + _internal::DefaultSasVersion + "\n" + resource + "\n"
|
||||
+ snapshotVersion + "\n" + CacheControl + "\n" + ContentDisposition + "\n" + ContentEncoding
|
||||
+ "\n" + ContentLanguage + "\n" + ContentType;
|
||||
+ "\n" + protocol + "\n" + SasVersion + "\n" + resource + "\n" + snapshotVersion + "\n"
|
||||
+ CacheControl + "\n" + ContentDisposition + "\n" + ContentEncoding + "\n" + ContentLanguage
|
||||
+ "\n" + ContentType;
|
||||
|
||||
std::string signature = Azure::Core::Convert::Base64Encode(_internal::HmacSha256(
|
||||
std::vector<uint8_t>(stringToSign.begin(), stringToSign.end()),
|
||||
Azure::Core::Convert::Base64Decode(credential.GetAccountKey())));
|
||||
|
||||
Azure::Core::Url builder;
|
||||
builder.AppendQueryParameter(
|
||||
"sv", _internal::UrlEncodeQueryParameter(_internal::DefaultSasVersion));
|
||||
builder.AppendQueryParameter("sv", _internal::UrlEncodeQueryParameter(SasVersion));
|
||||
builder.AppendQueryParameter("spr", _internal::UrlEncodeQueryParameter(protocol));
|
||||
if (!startsOnStr.empty())
|
||||
{
|
||||
@ -248,17 +249,15 @@ namespace Azure { namespace Storage { namespace Sas {
|
||||
+ userDelegationKey.SignedTenantId + "\n" + signedStartsOnStr + "\n" + signedExpiresOnStr
|
||||
+ "\n" + userDelegationKey.SignedService + "\n" + userDelegationKey.SignedVersion
|
||||
+ "\n\n\n\n" + (IPRange.HasValue() ? IPRange.Value() : "") + "\n" + protocol + "\n"
|
||||
+ _internal::DefaultSasVersion + "\n" + resource + "\n" + snapshotVersion + "\n"
|
||||
+ CacheControl + "\n" + ContentDisposition + "\n" + ContentEncoding + "\n" + ContentLanguage
|
||||
+ "\n" + ContentType;
|
||||
+ SasVersion + "\n" + resource + "\n" + snapshotVersion + "\n" + CacheControl + "\n"
|
||||
+ ContentDisposition + "\n" + ContentEncoding + "\n" + ContentLanguage + "\n" + ContentType;
|
||||
|
||||
std::string signature = Azure::Core::Convert::Base64Encode(_internal::HmacSha256(
|
||||
std::vector<uint8_t>(stringToSign.begin(), stringToSign.end()),
|
||||
Azure::Core::Convert::Base64Decode(userDelegationKey.Value)));
|
||||
|
||||
Azure::Core::Url builder;
|
||||
builder.AppendQueryParameter(
|
||||
"sv", _internal::UrlEncodeQueryParameter(_internal::DefaultSasVersion));
|
||||
builder.AppendQueryParameter("sv", _internal::UrlEncodeQueryParameter(SasVersion));
|
||||
builder.AppendQueryParameter("sr", _internal::UrlEncodeQueryParameter(resource));
|
||||
if (!startsOnStr.empty())
|
||||
{
|
||||
|
||||
@ -18,7 +18,6 @@ namespace Azure { namespace Storage { namespace _internal {
|
||||
constexpr static const char* HttpHeaderContentType = "content-type";
|
||||
constexpr static const char* HttpHeaderContentLength = "content-length";
|
||||
constexpr static const char* HttpHeaderContentRange = "content-range";
|
||||
constexpr static const char* DefaultSasVersion = "2020-08-04";
|
||||
|
||||
constexpr int ReliableStreamRetryCount = 3;
|
||||
}}} // namespace Azure::Storage::_internal
|
||||
|
||||
@ -8,6 +8,9 @@
|
||||
#include "azure/storage/common/crypt.hpp"
|
||||
|
||||
namespace Azure { namespace Storage { namespace Sas {
|
||||
namespace {
|
||||
constexpr static const char* SasVersion = "2020-08-04";
|
||||
}
|
||||
|
||||
void AccountSasBuilder::SetPermissions(AccountSasPermissions permissions)
|
||||
{
|
||||
@ -105,16 +108,14 @@ namespace Azure { namespace Storage { namespace Sas {
|
||||
|
||||
std::string stringToSign = credential.AccountName + "\n" + Permissions + "\n" + services + "\n"
|
||||
+ resourceTypes + "\n" + startsOnStr + "\n" + expiresOnStr + "\n"
|
||||
+ (IPRange.HasValue() ? IPRange.Value() : "") + "\n" + protocol + "\n"
|
||||
+ _internal::DefaultSasVersion + "\n";
|
||||
+ (IPRange.HasValue() ? IPRange.Value() : "") + "\n" + protocol + "\n" + SasVersion + "\n";
|
||||
|
||||
std::string signature = Azure::Core::Convert::Base64Encode(_internal::HmacSha256(
|
||||
std::vector<uint8_t>(stringToSign.begin(), stringToSign.end()),
|
||||
Azure::Core::Convert::Base64Decode(credential.GetAccountKey())));
|
||||
|
||||
Azure::Core::Url builder;
|
||||
builder.AppendQueryParameter(
|
||||
"sv", _internal::UrlEncodeQueryParameter(_internal::DefaultSasVersion));
|
||||
builder.AppendQueryParameter("sv", _internal::UrlEncodeQueryParameter(SasVersion));
|
||||
builder.AppendQueryParameter("ss", _internal::UrlEncodeQueryParameter(services));
|
||||
builder.AppendQueryParameter("srt", _internal::UrlEncodeQueryParameter(resourceTypes));
|
||||
builder.AppendQueryParameter("sp", _internal::UrlEncodeQueryParameter(Permissions));
|
||||
|
||||
@ -10,6 +10,8 @@
|
||||
|
||||
namespace Azure { namespace Storage { namespace Sas {
|
||||
namespace {
|
||||
constexpr static const char* SasVersion = "2020-02-10";
|
||||
|
||||
std::string DataLakeSasResourceToString(DataLakeSasResource resource)
|
||||
{
|
||||
if (resource == DataLakeSasResource::FileSystem)
|
||||
@ -136,17 +138,15 @@ namespace Azure { namespace Storage { namespace Sas {
|
||||
|
||||
std::string stringToSign = Permissions + "\n" + startsOnStr + "\n" + expiresOnStr + "\n"
|
||||
+ canonicalName + "\n" + Identifier + "\n" + (IPRange.HasValue() ? IPRange.Value() : "")
|
||||
+ "\n" + protocol + "\n" + _internal::DefaultSasVersion + "\n" + resource + "\n" + "\n"
|
||||
+ CacheControl + "\n" + ContentDisposition + "\n" + ContentEncoding + "\n" + ContentLanguage
|
||||
+ "\n" + ContentType;
|
||||
+ "\n" + protocol + "\n" + SasVersion + "\n" + resource + "\n" + "\n" + CacheControl + "\n"
|
||||
+ ContentDisposition + "\n" + ContentEncoding + "\n" + ContentLanguage + "\n" + ContentType;
|
||||
|
||||
std::string signature = Azure::Core::Convert::Base64Encode(_internal::HmacSha256(
|
||||
std::vector<uint8_t>(stringToSign.begin(), stringToSign.end()),
|
||||
Azure::Core::Convert::Base64Decode(credential.GetAccountKey())));
|
||||
|
||||
Azure::Core::Url builder;
|
||||
builder.AppendQueryParameter(
|
||||
"sv", _internal::UrlEncodeQueryParameter(_internal::DefaultSasVersion));
|
||||
builder.AppendQueryParameter("sv", _internal::UrlEncodeQueryParameter(SasVersion));
|
||||
builder.AppendQueryParameter("spr", _internal::UrlEncodeQueryParameter(protocol));
|
||||
if (!startsOnStr.empty())
|
||||
{
|
||||
@ -222,17 +222,16 @@ namespace Azure { namespace Storage { namespace Sas {
|
||||
+ userDelegationKey.SignedTenantId + "\n" + signedStartsOnStr + "\n" + signedExpiresOnStr
|
||||
+ "\n" + userDelegationKey.SignedService + "\n" + userDelegationKey.SignedVersion + "\n"
|
||||
+ PreauthorizedAgentObjectId + "\n" + AgentObjectId + "\n" + CorrelationId + "\n"
|
||||
+ (IPRange.HasValue() ? IPRange.Value() : "") + "\n" + protocol + "\n"
|
||||
+ _internal::DefaultSasVersion + "\n" + resource + "\n" + "\n" + CacheControl + "\n"
|
||||
+ ContentDisposition + "\n" + ContentEncoding + "\n" + ContentLanguage + "\n" + ContentType;
|
||||
+ (IPRange.HasValue() ? IPRange.Value() : "") + "\n" + protocol + "\n" + SasVersion + "\n"
|
||||
+ resource + "\n" + "\n" + CacheControl + "\n" + ContentDisposition + "\n" + ContentEncoding
|
||||
+ "\n" + ContentLanguage + "\n" + ContentType;
|
||||
|
||||
std::string signature = Azure::Core::Convert::Base64Encode(_internal::HmacSha256(
|
||||
std::vector<uint8_t>(stringToSign.begin(), stringToSign.end()),
|
||||
Azure::Core::Convert::Base64Decode(userDelegationKey.Value)));
|
||||
|
||||
Azure::Core::Url builder;
|
||||
builder.AppendQueryParameter(
|
||||
"sv", _internal::UrlEncodeQueryParameter(_internal::DefaultSasVersion));
|
||||
builder.AppendQueryParameter("sv", _internal::UrlEncodeQueryParameter(SasVersion));
|
||||
builder.AppendQueryParameter("sr", _internal::UrlEncodeQueryParameter(resource));
|
||||
if (!startsOnStr.empty())
|
||||
{
|
||||
|
||||
@ -11,6 +11,8 @@
|
||||
namespace Azure { namespace Storage { namespace Sas {
|
||||
|
||||
namespace {
|
||||
constexpr static const char* SasVersion = "2020-02-10";
|
||||
|
||||
std::string ShareSasResourceToString(ShareSasResource resource)
|
||||
{
|
||||
if (resource == ShareSasResource::Share)
|
||||
@ -97,16 +99,15 @@ namespace Azure { namespace Storage { namespace Sas {
|
||||
|
||||
std::string stringToSign = Permissions + "\n" + startsOnStr + "\n" + expiresOnStr + "\n"
|
||||
+ canonicalName + "\n" + Identifier + "\n" + (IPRange.HasValue() ? IPRange.Value() : "")
|
||||
+ "\n" + protocol + "\n" + _internal::DefaultSasVersion + "\n" + CacheControl + "\n"
|
||||
+ ContentDisposition + "\n" + ContentEncoding + "\n" + ContentLanguage + "\n" + ContentType;
|
||||
+ "\n" + protocol + "\n" + SasVersion + "\n" + CacheControl + "\n" + ContentDisposition
|
||||
+ "\n" + ContentEncoding + "\n" + ContentLanguage + "\n" + ContentType;
|
||||
|
||||
std::string signature = Azure::Core::Convert::Base64Encode(_internal::HmacSha256(
|
||||
std::vector<uint8_t>(stringToSign.begin(), stringToSign.end()),
|
||||
Azure::Core::Convert::Base64Decode(credential.GetAccountKey())));
|
||||
|
||||
Azure::Core::Url builder;
|
||||
builder.AppendQueryParameter(
|
||||
"sv", _internal::UrlEncodeQueryParameter(_internal::DefaultSasVersion));
|
||||
builder.AppendQueryParameter("sv", _internal::UrlEncodeQueryParameter(SasVersion));
|
||||
builder.AppendQueryParameter("spr", _internal::UrlEncodeQueryParameter(protocol));
|
||||
if (!startsOnStr.empty())
|
||||
{
|
||||
|
||||
@ -8,6 +8,10 @@
|
||||
|
||||
namespace Azure { namespace Storage { namespace Sas {
|
||||
|
||||
namespace {
|
||||
constexpr static const char* SasVersion = "2020-02-10";
|
||||
}
|
||||
|
||||
void QueueSasBuilder::SetPermissions(QueueSasPermissions permissions)
|
||||
{
|
||||
Permissions.clear();
|
||||
@ -47,15 +51,14 @@ namespace Azure { namespace Storage { namespace Sas {
|
||||
|
||||
std::string stringToSign = Permissions + "\n" + startsOnStr + "\n" + expiresOnStr + "\n"
|
||||
+ canonicalName + "\n" + Identifier + "\n" + (IPRange.HasValue() ? IPRange.Value() : "")
|
||||
+ "\n" + protocol + "\n" + _internal::DefaultSasVersion;
|
||||
+ "\n" + protocol + "\n" + SasVersion;
|
||||
|
||||
std::string signature = Azure::Core::Convert::Base64Encode(_internal::HmacSha256(
|
||||
std::vector<uint8_t>(stringToSign.begin(), stringToSign.end()),
|
||||
Azure::Core::Convert::Base64Decode(credential.GetAccountKey())));
|
||||
|
||||
Azure::Core::Url builder;
|
||||
builder.AppendQueryParameter(
|
||||
"sv", _internal::UrlEncodeQueryParameter(_internal::DefaultSasVersion));
|
||||
builder.AppendQueryParameter("sv", _internal::UrlEncodeQueryParameter(SasVersion));
|
||||
builder.AppendQueryParameter("spr", _internal::UrlEncodeQueryParameter(protocol));
|
||||
if (!startsOnStr.empty())
|
||||
{
|
||||
|
||||
Loading…
Reference in New Issue
Block a user