Sample code for 30+ languages & platforms
PureBasic

AWS Security Token Service (STS) GetSessionToken

See more AWS Security Token Service Examples

Returns a set of temporary credentials for an AWS account or IAM user.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkXml.pb"
IncludeFile "CkAuthAws.pb"
IncludeFile "CkRest.pb"

Procedure ChilkatExample()

    success.i = 0

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

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

    ; Connect to the Amazon AWS REST server.
    ; such as https://sts.us-west-2.amazonaws.com/
    bTls.i = 1
    port.i = 443
    bAutoReconnect.i = 1
    success = CkRest::ckConnect(rest,"sts.us-west-2.amazonaws.com",port,bTls,bAutoReconnect)

    ; Provide AWS credentials for the REST call.
    authAws.i = CkAuthAws::ckCreate()
    If authAws.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkAuthAws::setCkAccessKey(authAws, "AWS_ACCESS_KEY")
    CkAuthAws::setCkSecretKey(authAws, "AWS_SECRET_KEY")
    ; the region should match our URL above..
    ; See https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html
    CkAuthAws::setCkRegion(authAws, "us-west-2")
    CkAuthAws::setCkServiceName(authAws, "sts")

    CkRest::ckSetAuthAws(rest,authAws)

    CkRest::ckAddQueryParam(rest,"Version","2011-06-15")
    CkRest::ckAddQueryParam(rest,"Action","GetSessionToken")
    CkRest::ckAddQueryParam(rest,"DurationSeconds","3600")

    responseXml.s = CkRest::ckFullRequestNoBody(rest,"GET","/")
    If CkRest::ckLastMethodSuccess(rest) <> 1
        Debug CkRest::ckLastErrorText(rest)
        CkRest::ckDispose(rest)
        CkAuthAws::ckDispose(authAws)
        ProcedureReturn
    EndIf

    ; A successful response will have a status code equal to 200.
    If CkRest::ckResponseStatusCode(rest) <> 200
        Debug "response status code = " + Str(CkRest::ckResponseStatusCode(rest))
        Debug "response status text = " + CkRest::ckResponseStatusText(rest)
        Debug "response header: " + CkRest::ckResponseHeader(rest)
        Debug "response body: " + responseXml
        CkRest::ckDispose(rest)
        CkAuthAws::ckDispose(authAws)
        ProcedureReturn
    EndIf

    ; Examine the successful XML response (shown below)
    xml.i = CkXml::ckCreate()
    If xml.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkXml::ckLoadXml(xml,responseXml)
    Debug CkXml::ckGetXml(xml)

    ; Sample response:

    ; <?xml version="1.0" encoding="utf-8"?>
    ; <GetSessionTokenResponse xmlns="https://sts.amazonaws.com/doc/2011-06-15/">
    ;     <GetSessionTokenResult>
    ;         <Credentials>
    ;             <AccessKeyId>AS........T4N</AccessKeyId>
    ;             <SecretAccessKey>05W........ARPMr</SecretAccessKey>
    ;             <SessionToken>IQoJb3J........llpIMI=</SessionToken>
    ;             <Expiration>2022-09-07T00:22:51Z</Expiration>
    ;         </Credentials>
    ;     </GetSessionTokenResult>
    ;     <ResponseMetadata>
    ;         <RequestId>8bad22cc-1c55-4265-a010-45d139359404</RequestId>
    ;     </ResponseMetadata>
    ; </GetSessionTokenResponse>

    ; Sample parse code:
    GetSessionTokenResponse_xmlns.s = CkXml::ckGetAttrValue(xml,"xmlns")
    AccessKeyId.s = CkXml::ckGetChildContent(xml,"GetSessionTokenResult|Credentials|AccessKeyId")
    SecretAccessKey.s = CkXml::ckGetChildContent(xml,"GetSessionTokenResult|Credentials|SecretAccessKey")
    SessionToken.s = CkXml::ckGetChildContent(xml,"GetSessionTokenResult|Credentials|SessionToken")
    Expiration.s = CkXml::ckGetChildContent(xml,"GetSessionTokenResult|Credentials|Expiration")
    RequestId.s = CkXml::ckGetChildContent(xml,"ResponseMetadata|RequestId")

    ; Save the session token XML to a file for use by another Chilkat example..
    success = CkXml::ckSaveXml(xml,"qa_data/tokens/aws_session_token.xml")


    CkRest::ckDispose(rest)
    CkAuthAws::ckDispose(authAws)
    CkXml::ckDispose(xml)


    ProcedureReturn
EndProcedure