Different storage service has its own sas version(sv) (#3380)

This commit is contained in:
JinmingHu 2022-02-28 16:47:59 +08:00 committed by GitHub
parent f628269290
commit 0af72dfa58
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 35 additions and 32 deletions

View File

@ -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()`.

View File

@ -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())
{

View File

@ -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

View File

@ -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));

View File

@ -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())
{

View File

@ -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())
{

View File

@ -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())
{