Functions/Get-AGGraphAccessToken.ps1
Function Get-AGGraphAccessToken{ <# .SYNOPSIS Gets the bearer token needed for Graph REST API calls. .DESCRIPTION Gets the bearer token needed for Graph REST API calls. .EXAMPLE $TenantId = "c123456f-a1cd-6fv7-bh73-123r5t6y7u8i9" $ClientId = '1a2s3d4d4-dfhg-4567-d5f6-h4f6g7k933ae' $ClientSecret = '36._ERF567.6FB.XFGY75D-35TGasdrvk467' Get-AGGraphAccessToken -TenantID $TenantID -ClientID $ClientId -ClientSecret $ClientSecret .EXAMPLE $TenantId = "c123456f-a1cd-6fv7-bh73-123r5t6y7u8i9" $ClientId = '1a2s3d4d4-dfhg-4567-d5f6-h4f6g7k933ae' $ClientSecret = '36._ERF567.6FB.XFGY75D-35TGasdrvk467' $Token = Get-AGGraphAccessToken -TenantID $TenantID -ClientID $ClientId -ClientSecret $ClientSecret This example stores the token in a variable that can be used to grant access. .PARAMETER TenantID This is the tenant ID of your Azure subscription. .PARAMETER ClientID This is the ClientID of the Service Principal .PARAMETER ClientSecret This is the Client secret that was generated when you secured the Service Principal .INPUTS Input is from command line or called from a script. .OUTPUTS This will output an access token that can be used in future API calls. .NOTES Author: Lars Panzerbjørn Creation Date: 2021.08.11 This token is also stored in the Script scope, and so is automagically available to other functions. #> [CmdletBinding()] param ( [Parameter(Mandatory)][string]$TenantID, [Parameter(Mandatory)][string]$ClientID, [Parameter(Mandatory)][string]$ClientSecret ) BEGIN{ $TokenEndpoint = "https://login.microsoftonline.com/$Tenantid/oauth2/v2.0/token" } PROCESS{ $Body = @{ Grant_Type = "client_credentials" Scope = "https://graph.microsoft.com/.default" Client_Id = $ClientID Client_Secret = $ClientSecret } $InvokeRestMethodSplat = @{ ContentType = 'application/x-www-form-urlencoded' Headers = @{'accept'='application/json'} Body = $Body Method = 'Post' URI = $TokenEndpoint } $Script:TenantID = $TenantID $Script:ClientID = $ClientId $Script:ClientSecret = $ClientSecret $Script:BaseUri = "https://graph.microsoft.com" $Script:TokenResponse = Invoke-RestMethod @InvokeRestMethodSplat $Script:Headers = @{Authorization = "Bearer $($tokenResponse.access_token)"} $TokenResponse | Add-Member NoteProperty ExpiresOn((Get-Date).AddSeconds($TokenResponse.expires_in)) } END{ Return $TokenResponse } } |