Public/Invoke-IamAuthenticate.ps1
<# .SYNOPSIS Authenticate agaist HSDP IAM as configured for the current Salesforce org .DESCRIPTION Uses the current org configuration to autenticate against the phecc__Access_Token_URL__c URL configured in the current configured Salesforce org. .INPUTS None. You cannot pipe objects to Invoke-IamAuthenticate. .OUTPUTS Returns as PSCustomObject with the following memebers: access_token expires_in refresh_token scope token_type .EXAMPLE PS> $auth = Invoke-IamAuthenticate .LINK Set-Config .NOTES Assumes config is initialized for org access. #> function Invoke-IamAuthenticate { [CmdletBinding()] [OutputType([PSCustomObject])] param() begin { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started" } end { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete" } process { Write-Debug "[$($MyInvocation.MyCommand.Name)] PSBoundParameters: $($PSBoundParameters | Out-String)" $config = Get-Config $sfHsdpConfig = Get-SfHsdpConfig $authForToken = [convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("$($sfHsdpConfig.phecc__Key__c):$($sfHsdpConfig.phecc__Secret__c)")) $Headers = @{ "api-version" = "2" "Content-Type" = "application/x-www-form-urlencoded; charset=UTF-8" "Accept" = "application/json" "Authorization" = "Basic $($authForToken)" } $Form = @{ "grant_type" = "password" "username" = $config.IamCredentials.GetNetworkCredential().username "password" = $config.IamCredentials.GetNetworkCredential().password "scope" = ($config.scopes -Join " ") } Invoke-RestMethod -Uri $sfHsdpConfig.phecc__Access_Token_URL__c -Method Post -Body $Form -Headers $Headers } } |