Проблема с отклонением событий Identity Risk с помощью Graph API - PullRequest
0 голосов
/ 20 мая 2019

Я пытаюсь закрыть / закрыть события риска с помощью автоматизированного процесса. Для этого нам нужно использовать Graph API https://graph.microsoft.com/beta/riskyUsers/dismiss

Я искал примеры и не мог их найти.

Я попытался использовать Post man, предоставив токен OAuth Bearer в заголовке, и я попытался с помощью скрипта PowerShell, а также попробовал с примером .Net, представленным на странице. Никто из них не работал

Код PowerShell

{
$body       = @{grant_type="client_credentials";resource=$resource;client_id=$ClientID;client_secret=$ClientSecret} 
$oauthResponse      = Invoke-RestMethod -Method POST -Uri $loginURL/$TenantName/oauth2/token?api-version=1.0 -Body $body 
return $oauthResponse
}  
$loginURL       = "https://login.windows.net" 
$resource = "https://graph.microsoft.com"
$ClientSecret="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 
$ClientID="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 
$TenantName="xxxxx.com"
$oauth=RefreshToken -loginURL $loginURL -resource $resource -ClientID $ClientID -clientSecret $ClientSecret -tenantName $TenantName
$headerParams = @{'Authorization'="$($oauth.token_type) $($oauth.access_token)"}
$url="https://graph.microsoft.com/beta/riskyUsers/dismiss"
$userIds=@()
$userIds+="xxxxx-xxxxx-xxxxx-xxxxx-xxxxx"
$body=(@{"userIds"=$userIds})|convertto-json
$Response = Invoke-WebRequest -UseBasicParsing -Headers $headerParams -Uri $url -Body $body -Method Post -ContentType "application/Json"

Ответ: Invoke-WebRequest: удаленный сервер возвратил ошибку: (500) Внутренняя ошибка сервера. На C: \ SourceCode \ MIMSolution \ PowerShellScripts \ AzurePSMA \ RiskyIdentityEvents \ ExportScript_debug.ps1: 19 char: 13 + $ Response = Invoke-WebRequest -UseBasicParsing -Headers $ headerParams -Uri $ url ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: InvalidOperation: (System.Net.HttpWebRequest: HttpWebRequest) [Invoke-WebRequest], WebException + FullyQualifiedErrorId: WebCmdletWebResponseException, Microsoft.PowerShell.Commands.InvokeWebRequestCommand

C # код:

 static void Main(string[] args)
        {
            var userIdsList = new List<String>();
            userIdsList.Add("xxxxx-xxxxx-xxxxx-xxxxx-xxxx");
             dismissUser(userIdsList);

        }

       static async void dismissUser(List<string> userIDs)

        {

            ClientCredential clientCredential = new ClientCredential("xxxxxxxxxxxxxxxxxxxxxxx");
            string clientId = "xxxxxxxxxxxxxxxxxxxxxx";
            IConfidentialClientApplication clientApplication = ClientCredentialProvider.CreateClientApplication(clientId, clientCredential);
            ClientCredentialProvider authProvider = new ClientCredentialProvider(clientApplication);
            GraphServiceClient graphClient = new GraphServiceClient(authProvider);
            await graphClient.RiskyUsers.Dismiss(userIDs).Request().PostAsync();
        }```

Exception:

{"Code: generalException\r\nMessage: An error occurred sending the request.\r\n"}

Inner Exception: 
{"Code: generalException\r\nMessage: Unexpected exception occured while authenticating the request.\r\n"}

1 Ответ

0 голосов
/ 24 мая 2019

Наконец, после нескольких попыток, я нашел решение: проблема была с токеном, который ранее был OAuth 1.0.

Я исправил этот фрагмент кода, который запрашивает OAuth 2.0, и проблема решена:

function RefreshToken($loginURL,$ClientID,$clientSecret,$tenantName) 
{ $body = @{grant_type="client_credentials";client_id=$ClientID;client_secret=$ClientSecret;scope="https://graph.microsoft.com/.default"} 

$ oauthResponse = Invoke-RestMethod -Metod POST -Uri $ loginURL / $ TenantName / oauth2 / v2.0 / token -Body $ body return $ oauthResponse}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...