Sample code for 30+ languages & platforms
PureBasic

How to Generate an Azure Storage Account Shared Access Signature (SAS)

See more Azure Cloud Storage Examples

Shows how to generate a Shared Access Signature (SAS) for an Azure Storage Account.

Note: This example requires Chilkat v9.5.0.65 or greater.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkFileAccess.pb"
IncludeFile "CkAuthAzureSAS.pb"
IncludeFile "CkDateTime.pb"

Procedure ChilkatExample()

    ; Note: Requires Chilkat v9.5.0.65 or greater.

    ; This requires the Chilkat API to have been previously unlocked.
    ; See Global Unlock Sample for sample code.

    ; --------------------------------------------------------------------------
    ; Create a Shared Access Signature (SAS) token for an Azure Storage Account.
    ; --------------------------------------------------------------------------

    ; See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/constructing-an-account-sas 
    ; for details regarding the Azure Storage Account SAS fields.

    authSas.i = CkAuthAzureSAS::ckCreate()
    If authSas.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkAuthAzureSAS::setCkAccessKey(authSas, "AZURE_ACCESS_KEY")

    ; Specify the format of the string to sign.
    ; Each comma character in the following string represents a LF ("\n") character.
    ; The names specified in the StringToSign are replaced with the values specified
    ; in the subsequent calls to SetTokenParam and SetNonTokenParam,.

    ; Note: The trailing comma in the StringToSign is intentional and important. This indicates that the 
    ; string to sign will end with a "\n".

    ; Also note: The names in the StringToSign are case sensitive.  The names
    ; specified in the 1st argument in the calls to SetNonTokenParam and SetTokenParam should
    ; match a name listed in StringToSign. 
    CkAuthAzureSAS::setCkStringToSign(authSas, "accountname,signedpermissions,signedservice,signedresourcetype,signedstart,signedexpiry,signedIP,signedProtocol,signedversion,")

    ;  The account name is "chilkat".  Use your own account name instead of "chilkat".
    ;  Also use your own container name instead of "mycontainer".
    CkAuthAzureSAS::ckSetNonTokenParam(authSas,"accountname","chilkat")

    CkAuthAzureSAS::ckSetTokenParam(authSas,"signedpermissions","sp","rwdlacup")
    CkAuthAzureSAS::ckSetTokenParam(authSas,"signedservice","ss","bfqt")
    CkAuthAzureSAS::ckSetTokenParam(authSas,"signedresourcetype","srt","sco")

    dt.i = CkDateTime::ckCreate()
    If dt.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkDateTime::ckSetFromCurrentSystemTime(dt)
    CkAuthAzureSAS::ckSetTokenParam(authSas,"signedstart","st",CkDateTime::ckGetAsIso8601(dt,"YYYY-MM-DDThh:mmTZD",0))

    ; This SAS token will be valid for 30 days.
    CkDateTime::ckAddDays(dt,30)
    CkAuthAzureSAS::ckSetTokenParam(authSas,"signedexpiry","se",CkDateTime::ckGetAsIso8601(dt,"YYYY-MM-DDThh:mmTZD",0))

    CkAuthAzureSAS::ckSetTokenParam(authSas,"signedProtocol","spr","https")

    ;  Specifiy values and query param names for each field.
    ;  If a field is not specified, then an empty string will be used for its value.
    CkAuthAzureSAS::ckSetTokenParam(authSas,"signedversion","sv","2015-04-05")

    ; Note that we did not call SetTokenParam for "signedIP".  For any omitted fields
    ; the value will default to the empty string.

    ; Generate the SAS token.
    sasToken.s = CkAuthAzureSAS::ckGenerateToken(authSas)
    If CkAuthAzureSAS::ckLastMethodSuccess(authSas) <> 1
        Debug CkAuthAzureSAS::ckLastErrorText(authSas)
        CkAuthAzureSAS::ckDispose(authSas)
        CkDateTime::ckDispose(dt)
        ProcedureReturn
    EndIf

    Debug "SAS token: " + sasToken

    ; Save the SAS token to a file.
    ; We can then use this pre-generated token for future Azure Storage Account operations.
    fac.i = CkFileAccess::ckCreate()
    If fac.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkFileAccess::ckWriteEntireTextFile(fac,"qa_data/tokens/azureStorageAccountSas.txt",sasToken,"utf-8",0)


    CkAuthAzureSAS::ckDispose(authSas)
    CkDateTime::ckDispose(dt)
    CkFileAccess::ckDispose(fac)


    ProcedureReturn
EndProcedure