Private/Set-PSDVAccessToken.ps1
|
function Set-PSDVAccessToken { [CmdletBinding()] param( [Parameter()] [Object] $AccessToken, [Parameter()] [Hashtable] $AuthContext = $Global:DATAVERSEAUTHCONTEXT, [Parameter()] [String] $Operation = 'Token acquisition' ) if ($null -eq $AuthContext) { throw 'No existing connection to Dataverse Environment, run Connect-PSDVOrg before executing other PSDV cmdlets' } if ($null -eq $AccessToken) { if ($null -ne $Global:DATAVERSEACCESSTOKEN -and ($Global:DATAVERSEACCESSTOKEN.ExpiresOn).AddMinutes(-5) -gt (Get-Date).ToUniversalTime()) { return } if ($AuthContext.ParameterSetName -eq 'AccessToken') { throw 'The access token supplied to Connect-PSDVOrg has expired or is about to expire and cannot be refreshed automatically. Acquire a new token and run Connect-PSDVOrg again with the -AccessToken parameter.' } Write-Verbose 'Refreshing Dataverse access token' $AccessToken = Get-PSDVAccessToken -AuthContext $AuthContext $Operation = 'Access token refresh' } if ($null -eq $AccessToken) { throw "$Operation did not return an access token." } $propertyNames = $AccessToken.PSObject.Properties.Name if ($propertyNames -notcontains 'Token' -or $null -eq $AccessToken.Token) { throw "$Operation returned an access token object without a Token value." } if ($propertyNames -notcontains 'ExpiresOn' -or $null -eq $AccessToken.ExpiresOn) { throw "$Operation returned an access token object without an ExpiresOn value." } $expiresOn = ([DateTimeOffset]$AccessToken.ExpiresOn).UtcDateTime if ($expiresOn -le (Get-Date).ToUniversalTime()) { throw "$Operation returned an access token that is already expired." } if ($propertyNames -contains 'RefreshToken') { $AuthContext.RefreshToken = $AccessToken.RefreshToken } $Global:DATAVERSEACCESSTOKEN = $AccessToken } |