SQL Server
SQL Server
Azure Key Vault Get Certificates
See more Azure Key Vault Examples
Demonstrates how to list the certificates in an Azure Key Vault.Note: This example requires Chilkat v9.5.0.96 or later.
Chilkat SQL Server Downloads
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls.
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
DECLARE @hr int
-- Important: Do not use nvarchar(max). See the warning about using nvarchar(max).
DECLARE @sTmp0 nvarchar(4000)
DECLARE @success int
SELECT @success = 0
-- 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.. starting in Chilkat v9.5.0.96, 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.
DECLARE @json int
EXEC @hr = sp_OACreate 'Chilkat.JsonObject', @json OUT
IF @hr <> 0
BEGIN
PRINT 'Failed to create ActiveX component'
RETURN
END
EXEC sp_OAMethod @json, 'UpdateString', @success OUT, '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
EXEC sp_OAMethod @json, 'UpdateString', @success OUT, 'client_secret', 'APP_PASSWORD'
-- The access token will be for Azure Key Vault operations.
EXEC sp_OAMethod @json, 'UpdateString', @success OUT, 'resource', 'https://vault.azure.net'
-- Specify the token endpoint which includes your tenant ID.
EXEC sp_OAMethod @json, 'UpdateString', @success OUT, 'token_endpoint', 'https://login.microsoftonline.com/TENANT_ID/oauth2/token'
DECLARE @http int
EXEC @hr = sp_OACreate 'Chilkat.Http', @http OUT
-- 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.
EXEC sp_OAMethod @json, 'Emit', @sTmp0 OUT
EXEC sp_OASetProperty @http, 'AuthToken', @sTmp0
-- Replace key_vault_name with the name of your Azure Key Vault.
DECLARE @sbResponse int
EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbResponse OUT
EXEC sp_OAMethod @http, 'QuickGetSb', @success OUT, 'https://key_vault_name.vault.azure.net/certificates?api-version=7.4', @sbResponse
IF @success = 0
BEGIN
DECLARE @statusCode int
EXEC sp_OAGetProperty @http, 'LastStatus', @statusCode OUT
IF @statusCode = 0
BEGIN
-- We did not get a response from the server..
EXEC sp_OAGetProperty @http, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
END
ELSE
BEGIN
-- We received a response, but it was an error.
PRINT 'Error response status code: ' + @statusCode
PRINT 'Error response:'
EXEC sp_OAMethod @sbResponse, 'GetAsString', @sTmp0 OUT
PRINT @sTmp0
END
EXEC @hr = sp_OADestroy @json
EXEC @hr = sp_OADestroy @http
EXEC @hr = sp_OADestroy @sbResponse
RETURN
END
DECLARE @jsonResp int
EXEC @hr = sp_OACreate 'Chilkat.JsonObject', @jsonResp OUT
EXEC sp_OAMethod @jsonResp, 'LoadSb', @success OUT, @sbResponse
EXEC sp_OASetProperty @jsonResp, 'EmitCompact', 0
EXEC sp_OAMethod @jsonResp, 'Emit', @sTmp0 OUT
PRINT @sTmp0
-- 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
DECLARE @id nvarchar(4000)
DECLARE @x5t nvarchar(4000)
DECLARE @Enabled int
DECLARE @Nbf int
DECLARE @Exp int
DECLARE @Created int
DECLARE @Updated int
DECLARE @subject nvarchar(4000)
DECLARE @i int
SELECT @i = 0
DECLARE @count_i int
EXEC sp_OAMethod @jsonResp, 'SizeOfArray', @count_i OUT, 'value'
WHILE @i < @count_i
BEGIN
EXEC sp_OASetProperty @jsonResp, 'I', @i
EXEC sp_OAMethod @jsonResp, 'StringOf', @id OUT, 'value[i].id'
EXEC sp_OAMethod @jsonResp, 'StringOf', @x5t OUT, 'value[i].x5t'
EXEC sp_OAMethod @jsonResp, 'BoolOf', @Enabled OUT, 'value[i].attributes.enabled'
EXEC sp_OAMethod @jsonResp, 'IntOf', @Nbf OUT, 'value[i].attributes.nbf'
EXEC sp_OAMethod @jsonResp, 'IntOf', @Exp OUT, 'value[i].attributes.exp'
EXEC sp_OAMethod @jsonResp, 'IntOf', @Created OUT, 'value[i].attributes.created'
EXEC sp_OAMethod @jsonResp, 'IntOf', @Updated OUT, 'value[i].attributes.updated'
EXEC sp_OAMethod @jsonResp, 'StringOf', @subject OUT, 'value[i].subject'
SELECT @i = @i + 1
END
EXEC @hr = sp_OADestroy @json
EXEC @hr = sp_OADestroy @http
EXEC @hr = sp_OADestroy @sbResponse
EXEC @hr = sp_OADestroy @jsonResp
END
GO