Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Lua) Get an Azure AD Access TokenDemonstrates how to obtain an Azure AD access token for authentication using a client ID, client secret, and tenant ID.
-- In the following call to loadlib, change the path (./chilkat.dll) to the relative or absolute directory where the chilkat.dll, chilkat.so, or chilkat.dylib is located. chilkat = assert(package.loadlib("./chilkat.dll", "luaopen_chilkat"))() print(chilkat._VERSION) -- This example requires the Chilkat API to have been previously unlocked. -- See Global Unlock Sample for sample code. local socket = chilkat.newSocket{} -- Make a TLS connection to login.microsoftonline.com, waiting at most 5000 milliseconds. local success = socket:Connect("login.microsoftonline.com",443,true,5000) if success ~= true then print(socket:LastErrorText()) end -- Create an Azure AD auth object, and provide the required information for authorization. local azureAD = chilkat.newAuthAzureAD{} azureAD:setClientId("AZURE_AD_CLIENT_ID") azureAD:setClientSecret("AZURE_AD_CLIENT_SECRET") azureAD:setTenantId("AZURE_TENANT_ID") azureAD:setResource("https://outlook.office365.com/") -- Retrieve the access token using the TLS connection to login.microsoftonline.com success = azureAD:ObtainAccessToken(socket) if success ~= true then print(socket:LastErrorText()) end -- Show the access token, and then save it to a JSON file -- for future use (such as with a REST method call). print("Azure AD Access Token = ", azureAD:AccessToken()) local json = chilkat.newJsonObject{} json:AppendString("accessToken",azureAD:AccessToken()) -- Save our access token to a file. It will be used in subsequent REST API calls. local fac = chilkat.newFileAccess{} fac:WriteEntireTextFile("qa_data/tokens/azureAD_office365.json",json:Emit(),"utf-8",false) -- Let's get the id information out of the access token. -- Our JSON looks like this: -- {"accessToken":"eyJ0eXAiO---TdjT3RjIn0.eyJhdWQiOiJo---jEuMCJ9.CIx0sUT8s---KvzKKUw"} -- I used "---" instead of "..." to indicate a large quantity of omitted chars. -- The accessToken is a long string composed of 3 base64 strings concatenated with "." chars. -- The 1st part is the JOSE header. If you decode from base64, you'll get the JSON JOSE header. -- The 2nd part is the id token. When decoded this is the JSON that contains information about the authenticated application. -- The 3rd part is binary and does not decode to JSON. -- Let's get the information from the 2nd part (the id token) local sa = chilkat.newStringArray{} sa:SplitAndAppend(json:StringOf("accessToken"),".") local sbIdToken = chilkat.newStringBuilder{} -- The 2nd string is at index 1. sbIdToken:Append(sa:GetString(1)) sbIdToken:Decode("base64","utf-8") local jsonIdToken = chilkat.newJsonObject{} jsonIdToken:LoadSb(sbIdToken) jsonIdToken:setEmitCompact(false) print(jsonIdToken:Emit()) -- We have something like this: -- { -- "aud": "https://outlook.office365.com/", -- "iss": "https://sts.windows.net/6e8ddd66-68d1-43b0-af5c-e31b4b7dd5cd/", -- "iat": 1586350465, -- "nbf": 1586350465, -- "exp": 1586354365, -- "aio": "42dgYNjyOtX8ZZB7JLfMFJGeKUmvAA==", -- "app_displayname": "ChilkatTest", -- "appid": "f125d695-c50e-456e-a578-a486f06d1213", -- "appidacr": "1", -- "idp": "https://sts.windows.net/6d8ddd66-68d1-43b0-af5c-e31b4b7dd5cd/", -- "oid": "7545a2fd-3f0d-48a4-9c58-a1a5700a24b1", -- "sid": "ab981252-9378-4d0c-964b-eb2e1451138f", -- "sub": "7546a2fc-3f0d-48a4-9c58-a1a5700a24b1", -- "tid": "6d8ddd66-68d1-43b0-af5c-e31b4b7dd5cd", -- "uti": "huIJBAa1tvGpczwV5S1BAA", -- "ver": "1.0" -- } -- Get the desired information from the JSON: local aud = jsonIdToken:StringOf("aud") local iss = jsonIdToken:StringOf("iss") local iat = jsonIdToken:IntOf("iat") local nbf = jsonIdToken:IntOf("nbf") local exp = jsonIdToken:IntOf("exp") local aio = jsonIdToken:StringOf("aio") local app_displayname = jsonIdToken:StringOf("app_displayname") local appid = jsonIdToken:StringOf("appid") local appidacr = jsonIdToken:StringOf("appidacr") local idp = jsonIdToken:StringOf("idp") local oid = jsonIdToken:StringOf("oid") local sid = jsonIdToken:StringOf("sid") local s_sub = jsonIdToken:StringOf("sub") local tid = jsonIdToken:StringOf("tid") local uti = jsonIdToken:StringOf("uti") local ver = jsonIdToken:StringOf("ver") |
© 2000-2022 Chilkat Software, Inc. All Rights Reserved.