Functions/Public/New-AzureRmAuthToken.ps1
function New-AzureRmAuthToken { <# .SYNOPSIS Creates a new authentication token for use against Azure RM REST API operations. .DESCRIPTION Creates a new authentication token for use against Azure RM REST API operations. This uses client/secret auth (not certificate auth). The returned output contains the OAuth bearer token and it's properties. .PARAMETER AadClientAppId The AAD client application ID. .PARAMETER AadClientAppSecret The AAD client application secret .PARAMETER AadTenantId The AAD tenant ID. .EXAMPLE C:\> New-AzureRmAuthToken -AadClientAppId <guid> -AadClientAppSecret '<secret>' -AadTenantId <guid> #> [CmdletBinding()] Param ( [Parameter( Mandatory=$true, HelpMessage='Please provide the AAD client application ID.')] [System.String] $AadClientAppId, [Parameter( Mandatory=$true, HelpMessage='Please provide the AAD client application secret.')] [System.String] $AadClientAppSecret, [Parameter( Mandatory=$true, HelpMessage='Please provide the AAD tenant ID.')] [System.String] $AadTenantId ) Process { # grab app constants $aadUri = $MyInvocation.MyCommand.Module.PrivateData.Constants.AadAuthenticationUri; $resource = $MyInvocation.MyCommand.Module.PrivateData.Constants.AadAuthenticationResource; # load the web assembly and encode parameters $null = [Reflection.Assembly]::LoadWithPartialName('System.Web'); $encodedClientAppSecret = [System.Web.HttpUtility]::UrlEncode($AadClientAppSecret); $encodedResource = [System.Web.HttpUtility]::UrlEncode($Resource); # construct and send the request $tenantAuthUri = $aadUri -f $AadTenantId; $headers = @{ 'Content-Type' = 'application/x-www-form-urlencoded'; }; $bodyParams = @( "grant_type=client_credentials", "client_id=$AadClientAppId", "client_secret=$encodedClientAppSecret", "resource=$encodedResource" ); $body = [System.String]::Join("&", $bodyParams); Invoke-RestMethod -Uri $tenantAuthUri -Method POST -Headers $headers -Body $body; } } |