Преобразовать проверку подлинности сценария Powershell Exchange EWS в ошибку Oauth: значение утверждения аудитории недействительно для текущего ресурса - PullRequest
0 голосов
/ 06 марта 2020

Я пытаюсь преобразовать некоторые существующие сценарии Exchange Online EWS для использования Oauth. Я могу запросить токен доступа, но когда я пытаюсь работать с почтовым ящиком, происходит следующее: Я ценю вашу помощь!

x-ms-Diagnostics: 2000003; reason = "Значение заявки на аудиторию недействительно для текущего ресурса. Заявка на аудиторию: 'https://graph.microsoft.com', URL запроса - «https://outlook.office365.com/EWS/ Exchange.asmx» и тип ресурса «Exchange». "; Error_category =" invalid_resource "

Вот код:

## Request an access token

# Define AppId, secret and scope, your tenant name and endpoint URL
$AppId = 'APP-ID HERE'
$AppSecret = 'SECRET HERE'
$Scope = "https://graph.microsoft.com/.default"
$TenantName = "OurDomain.onmicrosoft.com"
$Url = "https://login.microsoftonline.com/$TenantName/oauth2/v2.0/token"

# Add System.Web for urlencode
Add-Type -AssemblyName System.Web

# Create body
$Body = @{
    client_id = $AppId
    client_secret = $AppSecret
    scope = $Scope
    grant_type = 'client_credentials'
}

# Splat the parameters for Invoke-Restmethod for cleaner code
$PostSplat = @{
    ContentType = 'application/x-www-form-urlencoded'
    Method = 'POST'

    # Create string by joining bodylist with '&'
    Body = $Body
    Uri = $Url
}

# Request the token!
$Request = Invoke-RestMethod @PostSplat

#######################

# Import "Microsoft Exchange Web Services Managed API 2.2"
Import-Module -Name "C:\Program Files\Microsoft\Exchange\Web Services\2.2\Microsoft.Exchange.WebServices.dll"

## Create the Exchange Service object with Oauth creds
$Service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService -ArgumentList Exchange2013_SP1
$service.Url= new-object Uri("https://outlook.office365.com/EWS/Exchange.asmx")
$Service.TraceEnabled = $true
$Service.Credentials = New-Object Microsoft.Exchange.WebServices.Data.OAuthCredentials($Request.access_token)

#####################

$Email = "UserA@OurDomain.com"

# Set the WellKnownFolder
$FolderId = [Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox

# Bind to WellKnownFolder Notes
$folder = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($Service, $folderId)

Write-Host "$($Email): $($folderName):  " -NoNewline 
$folder.archivetag.RetentionId.Guid     

1 Ответ

0 голосов
/ 09 марта 2020

В вашем скрипте вам нужно изменить исходную область видимости с

$Scope = "https://graph.microsoft.com/.default"

на

$Scope = "https://outlook.office365.com/.default"

Остальная часть кода не использует график, поэтому вы не Не нужно получать токен доступа для чего-то, что вы не используете. Кроме того, поскольку вы используете App Secret, вы будете генерировать токен только для приложения, что означает, что у вас все равно не будет токена refre sh. В вашем коде EWS отсутствуют две вещи: вам нужно использовать олицетворение EWS, а также всегда устанавливать заголовок X-AnchorMailbox, например, у вас будет

$service.HttpHeaders.Add("X-AnchorMailbox", "mailboxtoaccess@domain.com")
$service.ImpersonatedUserId = new-object Microsoft.Exchange.WebServices.Data.ImpersonatedUserId([Microsoft.Exchange.WebServices.Data.ConnectingIdType]::SmtpAddress, "mailboxtoaccess@domain.com")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...