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
(Tcl) 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.
load ./chilkat.dll # This example requires the Chilkat API to have been previously unlocked. # See Global Unlock Sample for sample code. set socket [new_CkSocket] # Make a TLS connection to login.microsoftonline.com, waiting at most 5000 milliseconds. set success [CkSocket_Connect $socket "login.microsoftonline.com" 443 1 5000] if {$success != 1} then { puts [CkSocket_lastErrorText $socket] delete_CkSocket $socket exit } # Create an Azure AD auth object, and provide the required information for authorization. set azureAD [new_CkAuthAzureAD] CkAuthAzureAD_put_ClientId $azureAD "AZURE_AD_CLIENT_ID" CkAuthAzureAD_put_ClientSecret $azureAD "AZURE_AD_CLIENT_SECRET" CkAuthAzureAD_put_TenantId $azureAD "AZURE_TENANT_ID" CkAuthAzureAD_put_Resource $azureAD "https://outlook.office365.com/" # Retrieve the access token using the TLS connection to login.microsoftonline.com set success [CkAuthAzureAD_ObtainAccessToken $azureAD $socket] if {$success != 1} then { puts [CkSocket_lastErrorText $socket] delete_CkSocket $socket delete_CkAuthAzureAD $azureAD exit } # Show the access token, and then save it to a JSON file # for future use (such as with a REST method call). puts "Azure AD Access Token = [CkAuthAzureAD_accessToken $azureAD]" set json [new_CkJsonObject] CkJsonObject_AppendString $json "accessToken" [CkAuthAzureAD_accessToken $azureAD] # Save our access token to a file. It will be used in subsequent REST API calls. set fac [new_CkFileAccess] CkFileAccess_WriteEntireTextFile $fac "qa_data/tokens/azureAD_office365.json" [CkJsonObject_emit $json] "utf-8" 0 # 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) set sa [new_CkStringArray] CkStringArray_SplitAndAppend $sa [CkJsonObject_stringOf $json "accessToken"] "." set sbIdToken [new_CkStringBuilder] # The 2nd string is at index 1. CkStringBuilder_Append $sbIdToken [CkStringArray_getString $sa 1] CkStringBuilder_Decode $sbIdToken "base64" "utf-8" set jsonIdToken [new_CkJsonObject] CkJsonObject_LoadSb $jsonIdToken $sbIdToken CkJsonObject_put_EmitCompact $jsonIdToken 0 puts [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: set aud [CkJsonObject_stringOf $jsonIdToken "aud"] set iss [CkJsonObject_stringOf $jsonIdToken "iss"] set iat [CkJsonObject_IntOf $jsonIdToken "iat"] set nbf [CkJsonObject_IntOf $jsonIdToken "nbf"] set exp [CkJsonObject_IntOf $jsonIdToken "exp"] set aio [CkJsonObject_stringOf $jsonIdToken "aio"] set app_displayname [CkJsonObject_stringOf $jsonIdToken "app_displayname"] set appid [CkJsonObject_stringOf $jsonIdToken "appid"] set appidacr [CkJsonObject_stringOf $jsonIdToken "appidacr"] set idp [CkJsonObject_stringOf $jsonIdToken "idp"] set oid [CkJsonObject_stringOf $jsonIdToken "oid"] set sid [CkJsonObject_stringOf $jsonIdToken "sid"] set s_sub [CkJsonObject_stringOf $jsonIdToken "sub"] set tid [CkJsonObject_stringOf $jsonIdToken "tid"] set uti [CkJsonObject_stringOf $jsonIdToken "uti"] set ver [CkJsonObject_stringOf $jsonIdToken "ver"] delete_CkSocket $socket delete_CkAuthAzureAD $azureAD delete_CkJsonObject $json delete_CkFileAccess $fac delete_CkStringArray $sa delete_CkStringBuilder $sbIdToken delete_CkJsonObject $jsonIdToken |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.