functions/other/Get-AccessToken.ps1
function Get-AccessToken { param ( [Parameter(Position = 0, Mandatory = $true)] [string] $MailboxName, [Parameter(Position = 1, Mandatory = $false)] [string] $ClientId, [Parameter(Position = 2, Mandatory = $false)] [string] $redirectUrl, [Parameter(Position = 3, Mandatory = $false)] [string] $ClientSecret, [Parameter(Position = 4, Mandatory = $false)] [string] $ResourceURL, [Parameter(Position = 5, Mandatory = $false)] [switch] $Beta, [Parameter(Position = 6, Mandatory = $false)] [String] $Prompt ) Begin { Add-Type -AssemblyName System.Web $HttpClient = Get-HTTPClient($MailboxName) $AppSetting = Get-AppSettings if ($ClientId -eq $null) { $ClientId = $AppSetting.ClientId } if ($ClientSecret -eq $null) { $ClientSecret = $AppSetting.ClientSecret } if ($redirectUrl -eq $null) { $redirectUrl = [System.Web.HttpUtility]::UrlEncode($AppSetting.redirectUrl) } else { $redirectUrl = [System.Web.HttpUtility]::UrlEncode($redirectUrl) } if ([String]::IsNullOrEmpty($ResourceURL)) { $ResourceURL = $AppSetting.ResourceURL } if ([String]::IsNullOrEmpty($Prompt)) { $Prompt = "refresh_session" } $Phase1auth = Show-OAuthWindow -Url "https://login.microsoftonline.com/common/oauth2/authorize?resource=https%3A%2F%2F$ResourceURL&client_id=$ClientId&response_type=code&redirect_uri=$redirectUrl&prompt=$Prompt" $code = $Phase1auth["code"] $AuthorizationPostRequest = "resource=https%3A%2F%2F$ResourceURL&client_id=$ClientId&grant_type=authorization_code&code=$code&redirect_uri=$redirectUrl" if (![String]::IsNullOrEmpty($ClientSecret)) { $AuthorizationPostRequest = "resource=https%3A%2F%2F$ResourceURL&client_id=$ClientId&client_secret=$ClientSecret&grant_type=authorization_code&code=$code&redirect_uri=$redirectUrl" } $content = New-Object System.Net.Http.StringContent($AuthorizationPostRequest, [System.Text.Encoding]::UTF8, "application/x-www-form-urlencoded") $ClientReesult = $HttpClient.PostAsync([Uri]("https://login.windows.net/common/oauth2/token"), $content) $JsonObject = ConvertFrom-Json -InputObject $ClientReesult.Result.Content.ReadAsStringAsync().Result if ([bool]($JsonObject.PSobject.Properties.name -match "refresh_token")) { $JsonObject.refresh_token = (Get-ProtectedToken -PlainToken $JsonObject.refresh_token) } if ([bool]($JsonObject.PSobject.Properties.name -match "access_token")) { $JsonObject.access_token = (Get-ProtectedToken -PlainToken $JsonObject.access_token) } if ([bool]($JsonObject.PSobject.Properties.name -match "id_token")) { $JsonObject.id_token = (Get-ProtectedToken -PlainToken $JsonObject.id_token) } Add-Member -InputObject $JsonObject -NotePropertyName clientid -NotePropertyValue $ClientId Add-Member -InputObject $JsonObject -NotePropertyName redirectUrl -NotePropertyValue $redirectUrl if ($Beta.IsPresent) { Add-Member -InputObject $JsonObject -NotePropertyName Beta -NotePropertyValue True } return $JsonObject } } |