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
(Objective-C) 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.
#import <CkoSocket.h> #import <CkoAuthAzureAD.h> #import <CkoJsonObject.h> #import <CkoFileAccess.h> #import <CkoStringArray.h> #import <CkoStringBuilder.h> #import <NSString.h> // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. CkoSocket *socket = [[CkoSocket alloc] init]; // Make a TLS connection to login.microsoftonline.com, waiting at most 5000 milliseconds. BOOL success = [socket Connect: @"login.microsoftonline.com" port: [NSNumber numberWithInt: 443] ssl: YES maxWaitMs: [NSNumber numberWithInt: 5000]]; if (success != YES) { NSLog(@"%@",socket.LastErrorText); return; } // Create an Azure AD auth object, and provide the required information for authorization. CkoAuthAzureAD *azureAD = [[CkoAuthAzureAD alloc] init]; azureAD.ClientId = @"AZURE_AD_CLIENT_ID"; azureAD.ClientSecret = @"AZURE_AD_CLIENT_SECRET"; azureAD.TenantId = @"AZURE_TENANT_ID"; azureAD.Resource = @"https://outlook.office365.com/"; // Retrieve the access token using the TLS connection to login.microsoftonline.com success = [azureAD ObtainAccessToken: socket]; if (success != YES) { NSLog(@"%@",socket.LastErrorText); return; } // Show the access token, and then save it to a JSON file // for future use (such as with a REST method call). NSLog(@"%@%@",@"Azure AD Access Token = ",azureAD.AccessToken); CkoJsonObject *json = [[CkoJsonObject alloc] init]; [json AppendString: @"accessToken" value: azureAD.AccessToken]; // Save our access token to a file. It will be used in subsequent REST API calls. CkoFileAccess *fac = [[CkoFileAccess alloc] init]; [fac WriteEntireTextFile: @"qa_data/tokens/azureAD_office365.json" fileData: [json Emit] charset: @"utf-8" includePreamble: NO]; // 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) CkoStringArray *sa = [[CkoStringArray alloc] init]; [sa SplitAndAppend: [json StringOf: @"accessToken"] boundary: @"."]; CkoStringBuilder *sbIdToken = [[CkoStringBuilder alloc] init]; // The 2nd string is at index 1. [sbIdToken Append: [sa GetString: [NSNumber numberWithInt: 1]]]; [sbIdToken Decode: @"base64" charset: @"utf-8"]; CkoJsonObject *jsonIdToken = [[CkoJsonObject alloc] init]; [jsonIdToken LoadSb: sbIdToken]; jsonIdToken.EmitCompact = NO; NSLog(@"%@",[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: NSString *aud = [jsonIdToken StringOf: @"aud"]; NSString *iss = [jsonIdToken StringOf: @"iss"]; int iat = [[jsonIdToken IntOf: @"iat"] intValue]; int nbf = [[jsonIdToken IntOf: @"nbf"] intValue]; int exp = [[jsonIdToken IntOf: @"exp"] intValue]; NSString *aio = [jsonIdToken StringOf: @"aio"]; NSString *app_displayname = [jsonIdToken StringOf: @"app_displayname"]; NSString *appid = [jsonIdToken StringOf: @"appid"]; NSString *appidacr = [jsonIdToken StringOf: @"appidacr"]; NSString *idp = [jsonIdToken StringOf: @"idp"]; NSString *oid = [jsonIdToken StringOf: @"oid"]; NSString *sid = [jsonIdToken StringOf: @"sid"]; NSString *s_sub = [jsonIdToken StringOf: @"sub"]; NSString *tid = [jsonIdToken StringOf: @"tid"]; NSString *uti = [jsonIdToken StringOf: @"uti"]; NSString *ver = [jsonIdToken StringOf: @"ver"]; |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.