class AzureBlob::EntraIdSigner
:nodoc:
def authorization_header(uri:, verb:, headers: {})
def authorization_header(uri:, verb:, headers: {}) "Bearer #{token}" end
def delegation_key
def delegation_key @delegation_key ||= UserDelegationKey.new(account_name:, signer: self) end
def initialize(account_name:, host:, principal_id: nil)
def initialize(account_name:, host:, principal_id: nil) @token = AzureBlob::IdentityToken.new(principal_id:) @account_name = account_name @host = host end
def sas_token(uri, options = {})
def sas_token(uri, options = {}) to_sign = [ options[:permissions], options[:start], options[:expiry], CanonicalizedResource.new(uri, account_name, url_safe: false, service_name: :blob), delegation_key.signed_oid, delegation_key.signed_tid, delegation_key.signed_start, delegation_key.signed_expiry, delegation_key.signed_service, delegation_key.signed_version, nil, nil, nil, options[:ip], options[:protocol], SAS::Version, SAS::Resources::Blob, nil, nil, nil, options[:content_disposition], nil, nil, options[:content_type], ].join("\n") query = { SAS::Fields::Permissions => options[:permissions], SAS::Fields::Start => options[:start], SAS::Fields::Expiry => options[:expiry], SAS::Fields::SignedObjectId => delegation_key.signed_oid, SAS::Fields::SignedTenantId => delegation_key.signed_tid, SAS::Fields::SignedKeyStartTime => delegation_key.signed_start, SAS::Fields::SignedKeyExpiryTime => delegation_key.signed_expiry, SAS::Fields::SignedKeyService => delegation_key.signed_service, SAS::Fields::Signedkeyversion => delegation_key.signed_version, SAS::Fields::SignedIp => options[:ip], SAS::Fields::SignedProtocol => options[:protocol], SAS::Fields::Version => SAS::Version, SAS::Fields::Resource => SAS::Resources::Blob, SAS::Fields::Disposition => options[:content_disposition], SAS::Fields::Type => options[:content_type], SAS::Fields::Signature => sign(to_sign, key: delegation_key.to_s), }.reject { |_, value| value.nil? } URI.encode_www_form(**query) end
def sign(body, key:)
def sign(body, key:) Base64.strict_encode64(OpenSSL::HMAC.digest("sha256", key, body)) end