Как правильно получить доступ к v2.0 REST API в PowerShell для управления почтовыми ящиками - PullRequest
0 голосов
/ 14 января 2019

У нас есть сценарий PowerShell, который проверяет почтовый ящик службы и обновляет информацию на наших настенных панелях, а затем перемещает соответствующие электронные письма в удаленную папку. Это было настроено под API v1.0, который сейчас устарел, и нам нужно изменить его на версию 2.0.

К сожалению, это привело к большой путанице и большому количеству царапин на голове, что не так уж и весело. Это происходило главным образом вокруг получения токена oAuth2 и последующей подачи его в запрос на почтовый ящик.

На данный момент нам удалось зарегистрировать приложение Azure AD, и оно предоставляет токен аутентификации, но оно возвращается как несанкционированное из Microsoft Graph.

# tenantID, clientSecret and clientID not here.

# The resource URI
$resource = "https://graph.microsoft.com"
# Your Client ID and Client Secret obainted when registering your WebApp

$redirectUri = "http://returnuri"

# UrlEncode the ClientID and ClientSecret and URL's for special characters 
$clientIDEncoded = [System.Web.HttpUtility]::UrlEncode($ClientID)
$clientSecretEncoded = [System.Web.HttpUtility]::UrlEncode($clientSecret)
$redirectUriEncoded =  [System.Web.HttpUtility]::UrlEncode($redirectUri)
$resourceEncoded = [System.Web.HttpUtility]::UrlEncode($resource)
$scopeEncoded = [System.Web.HttpUtility]::UrlEncode("https://outlook.office.com/user.readwrite.all")

$body = @"
client_id=$ClientID
&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default
&client_secret=$clientSecretEncoded
&grant_type=client_credentials
"@

$userid = 'userID'

$accessToken = Invoke-RestMethod "https://login.microsoftonline.com/$tenantID/oauth2/v2.0/token" -Method Post -Body $body
#
#$cred = $(Get-Credential)

Invoke-RestMethod -Uri "https://graph.microsoft.com/v1.0/users/$userid/messages" -Headers @{Authorization = "Bearer $($accessToken.access_token)"} -Credential $cred

Ожидаемые результаты: доступ к почтовому ящику.

Фактические результаты:

Invoke-RestMethod : The remote server returned an error: (401) Unauthorized.
At line:32 char:1
+ Invoke-RestMethod -Uri "https://graph.microsoft.com/v1.0/users/$useri ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation:     (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...