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
(Delphi DLL) 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.
uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, FileAccess, Socket, AuthAzureAD, JsonObject, StringBuilder, StringArray; ... procedure TForm1.Button1Click(Sender: TObject); var socket: HCkSocket; success: Boolean; azureAD: HCkAuthAzureAD; json: HCkJsonObject; fac: HCkFileAccess; sa: HCkStringArray; sbIdToken: HCkStringBuilder; jsonIdToken: HCkJsonObject; aud: PWideChar; iss: PWideChar; iat: Integer; nbf: Integer; exp: Integer; aio: PWideChar; app_displayname: PWideChar; appid: PWideChar; appidacr: PWideChar; idp: PWideChar; oid: PWideChar; sid: PWideChar; s_sub: PWideChar; tid: PWideChar; uti: PWideChar; ver: PWideChar; begin // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. socket := CkSocket_Create(); // Make a TLS connection to login.microsoftonline.com, waiting at most 5000 milliseconds. success := CkSocket_Connect(socket,'login.microsoftonline.com',443,True,5000); if (success <> True) then begin Memo1.Lines.Add(CkSocket__lastErrorText(socket)); Exit; end; // Create an Azure AD auth object, and provide the required information for authorization. azureAD := CkAuthAzureAD_Create(); CkAuthAzureAD_putClientId(azureAD,'AZURE_AD_CLIENT_ID'); CkAuthAzureAD_putClientSecret(azureAD,'AZURE_AD_CLIENT_SECRET'); CkAuthAzureAD_putTenantId(azureAD,'AZURE_TENANT_ID'); CkAuthAzureAD_putResource(azureAD,'https://outlook.office365.com/'); // Retrieve the access token using the TLS connection to login.microsoftonline.com success := CkAuthAzureAD_ObtainAccessToken(azureAD,socket); if (success <> True) then begin Memo1.Lines.Add(CkSocket__lastErrorText(socket)); Exit; end; // Show the access token, and then save it to a JSON file // for future use (such as with a REST method call). Memo1.Lines.Add('Azure AD Access Token = ' + CkAuthAzureAD__accessToken(azureAD)); json := CkJsonObject_Create(); CkJsonObject_AppendString(json,'accessToken',CkAuthAzureAD__accessToken(azureAD)); // Save our access token to a file. It will be used in subsequent REST API calls. fac := CkFileAccess_Create(); CkFileAccess_WriteEntireTextFile(fac,'qa_data/tokens/azureAD_office365.json',CkJsonObject__emit(json),'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) sa := CkStringArray_Create(); CkStringArray_SplitAndAppend(sa,CkJsonObject__stringOf(json,'accessToken'),'.'); sbIdToken := CkStringBuilder_Create(); // The 2nd string is at index 1. CkStringBuilder_Append(sbIdToken,CkStringArray__getString(sa,1)); CkStringBuilder_Decode(sbIdToken,'base64','utf-8'); jsonIdToken := CkJsonObject_Create(); CkJsonObject_LoadSb(jsonIdToken,sbIdToken); CkJsonObject_putEmitCompact(jsonIdToken,False); Memo1.Lines.Add(CkJsonObject__emit(jsonIdToken)); // 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: aud := CkJsonObject__stringOf(jsonIdToken,'aud'); iss := CkJsonObject__stringOf(jsonIdToken,'iss'); iat := CkJsonObject_IntOf(jsonIdToken,'iat'); nbf := CkJsonObject_IntOf(jsonIdToken,'nbf'); exp := CkJsonObject_IntOf(jsonIdToken,'exp'); aio := CkJsonObject__stringOf(jsonIdToken,'aio'); app_displayname := CkJsonObject__stringOf(jsonIdToken,'app_displayname'); appid := CkJsonObject__stringOf(jsonIdToken,'appid'); appidacr := CkJsonObject__stringOf(jsonIdToken,'appidacr'); idp := CkJsonObject__stringOf(jsonIdToken,'idp'); oid := CkJsonObject__stringOf(jsonIdToken,'oid'); sid := CkJsonObject__stringOf(jsonIdToken,'sid'); s_sub := CkJsonObject__stringOf(jsonIdToken,'sub'); tid := CkJsonObject__stringOf(jsonIdToken,'tid'); uti := CkJsonObject__stringOf(jsonIdToken,'uti'); ver := CkJsonObject__stringOf(jsonIdToken,'ver'); CkSocket_Dispose(socket); CkAuthAzureAD_Dispose(azureAD); CkJsonObject_Dispose(json); CkFileAccess_Dispose(fac); CkStringArray_Dispose(sa); CkStringBuilder_Dispose(sbIdToken); CkJsonObject_Dispose(jsonIdToken); end; |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.