Sample code for 30+ languages & platforms
Lua Requires Chilkat v9.5.0.96+

Azure Key Vault Get Certificates

See more Azure Key Vault Examples

Demonstrates how to list the certificates in an Azure Key Vault.

Chilkat Lua Downloads

Lua
local chilkat = require("chilkat")

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

-- We demonstrated how to get an access token for your Azure Key Vault
-- in this example: Azure Key Vault Get OAuth2 Access Token using Client Credentials

-- However.. instead of directly providing Chilkat with the OAuth2 access token,
-- you can instead provide the means for Chilkat to automatically get the OAuth2 access token,
-- and in addition, Chilkat will automatically re-fetch a new OAuth2 access token as needed, such as shortly
-- prior to or after expiration.

-- You do this by setting the AuthToken property to a JSON string that contains the required information.

local json = chilkat.JsonObject.new()
json:update_string("client_id", "APP_ID")

-- The APP_PASSWORD is the "password" returned by the Azure CLI command: az ad sp create-for-rbac --name http://example.com --role Contributor
-- See Azure Key Vault Get OAuth2 Access Token using Client Credentials
json:update_string("client_secret", "APP_PASSWORD")

-- The access token will be for Azure Key Vault operations.
json:update_string("resource", "https://vault.azure.net")

-- Specify the token endpoint which includes your tenant ID.
json:update_string("token_endpoint", "https://login.microsoftonline.com/TENANT_ID/oauth2/token")

local http = chilkat.Http.new()

-- Instead of providing an actual access token, we give Chilkat the information that allows it to
-- automatically fetch the access token using the OAuth2 client credentials flow.
http.auth_token = json:emit()

-- Replace key_vault_name with the name of your Azure Key Vault.
local sbResponse = chilkat.StringBuilder.new()
local success = http:quick_get_sb("https://key_vault_name.vault.azure.net/certificates?api-version=7.4", sbResponse)
if not success then
    local statusCode = http.last_status
    if statusCode == 0 then
        -- We did not get a response from the server..
        print(http.last_error_text)
    else
        -- We received a response, but it was an error.
        print("Error response status code: " .. statusCode)
        print("Error response:")
        print(sbResponse:get_as_string())
    end

    return
end

local jsonResp = chilkat.JsonObject.new()
jsonResp:load_sb(sbResponse)
jsonResp.emit_compact = false

print(jsonResp:emit())

-- The output looks like this:

-- {
--   "value": [
--     {
--       "id": "https://kvchilkat.vault.azure.net/certificates/BadSSL",
--       "x5t": "U04xLnb8Ww7BKkW9dD7P1cCHNDY",
--       "attributes": {
--         "enabled": true,
--         "nbf": 1674409014,
--         "exp": 1737481014,
--         "created": 1697294224,
--         "updated": 1697294224
--       },
--       "subject": ""
--     },
--     {
--       "id": "https://kvchilkat.vault.azure.net/certificates/Brasil",
--       "x5t": "ayF5eBtlA35xPMivusE0wpmFjnA",
--       "attributes": {
--         "enabled": true,
--         "nbf": 1667830002,
--         "exp": 1699366002,
--         "created": 1697294090,
--         "updated": 1697294090
--       },
--       "subject": ""
--     }
--   ],
--   "nextLink": null
-- }

-- Use this online tool to generate parsing code from sample JSON:
-- Generate Parsing Code from JSON

local id = ""
local x5t = ""
local Enabled = false
local Nbf = 0
local Exp = 0
local Created = 0
local Updated = 0
local subject = ""

local i = 0
local count_i = jsonResp:size_of_array("value")
while i < count_i do
    jsonResp.i = i
    id = jsonResp:string_of("value[i].id")
    x5t = jsonResp:string_of("value[i].x5t")
    Enabled = jsonResp:bool_of("value[i].attributes.enabled")
    Nbf = jsonResp:int_of("value[i].attributes.nbf")
    Exp = jsonResp:int_of("value[i].attributes.exp")
    Created = jsonResp:int_of("value[i].attributes.created")
    Updated = jsonResp:int_of("value[i].attributes.updated")
    subject = jsonResp:string_of("value[i].subject")
    i = i + 1
end