SQL Server
SQL Server
Azure REST API Access Token
See more Azure OAuth2 Examples
Demonstrates how to request an Azure REST API OAUTH2 access token.Note: In order to access resources a Service Principal needs to be created in your Tenant. It is really convenient to do it via AZ CLI:
az ad sp create-for-rbac --name [APP_NAME] --password [CLIENT_SECRET]
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
DECLARE @iTmp0 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 example requires the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.
DECLARE @rest int
EXEC @hr = sp_OACreate 'Chilkat.Rest', @rest OUT
IF @hr <> 0
BEGIN
PRINT 'Failed to create ActiveX component'
RETURN
END
-- URL: https://login.microsoftonline.com/TENANT_ID/oauth2/token
DECLARE @bTls int
SELECT @bTls = 1
DECLARE @port int
SELECT @port = 443
DECLARE @bAutoReconnect int
SELECT @bAutoReconnect = 1
EXEC sp_OAMethod @rest, 'Connect', @success OUT, 'login.microsoftonline.com', @port, @bTls, @bAutoReconnect
IF @success <> 1
BEGIN
EXEC sp_OAGetProperty @rest, 'ConnectFailReason', @iTmp0 OUT
PRINT 'ConnectFailReason: ' + @iTmp0
EXEC sp_OAGetProperty @rest, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @rest
RETURN
END
-- Add query params to the request.
EXEC sp_OAMethod @rest, 'AddQueryParam', @success OUT, 'grant_type', 'client_credentials'
EXEC sp_OAMethod @rest, 'AddQueryParam', @success OUT, 'client_id', 'APP_ID'
EXEC sp_OAMethod @rest, 'AddQueryParam', @success OUT, 'client_secret', 'CLIENT_SECRET'
-- Note: The resource must match the API for which you're using the access token..
EXEC sp_OAMethod @rest, 'AddQueryParam', @success OUT, 'resource', 'https://management.azure.com/'
DECLARE @strResponseBody nvarchar(4000)
EXEC sp_OAMethod @rest, 'FullRequestFormUrlEncoded', @strResponseBody OUT, 'POST', '/TENANT_ID/oauth2/token'
EXEC sp_OAGetProperty @rest, 'LastMethodSuccess', @iTmp0 OUT
IF @iTmp0 <> 1
BEGIN
EXEC sp_OAGetProperty @rest, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @rest
RETURN
END
DECLARE @respStatusCode int
EXEC sp_OAGetProperty @rest, 'ResponseStatusCode', @respStatusCode OUT
IF @respStatusCode >= 400
BEGIN
PRINT 'Response Status Code = ' + @respStatusCode
PRINT 'Response Header:'
EXEC sp_OAGetProperty @rest, 'ResponseHeader', @sTmp0 OUT
PRINT @sTmp0
PRINT 'Response Body:'
PRINT @strResponseBody
EXEC @hr = sp_OADestroy @rest
RETURN
END
DECLARE @json int
EXEC @hr = sp_OACreate 'Chilkat.JsonObject', @json OUT
EXEC sp_OAMethod @json, 'Load', @success OUT, @strResponseBody
EXEC sp_OASetProperty @json, 'EmitCompact', 0
EXEC sp_OAMethod @json, 'Emit', @sTmp0 OUT
PRINT @sTmp0
-- The result is an access token such as the following:
-- {
-- "token_type": "Bearer",
-- "expires_in": "3600",
-- "ext_expires_in": "3600",
-- "expires_on": "1557864616",
-- "not_before": "1557860716",
-- "resource": "https://management.azure.com/",
-- "access_token": "eyJ0eXAiOiJKV1QiL ... 20UFDDOHEyUg"
-- }
-- We'll save this JSON to a file for other examples to use..
EXEC sp_OAMethod @json, 'WriteFile', @success OUT, 'qa_data/tokens/azureToken.json'
EXEC @hr = sp_OADestroy @rest
EXEC @hr = sp_OADestroy @json
END
GO