Error 400 Bad Request when attempting to pull Skype for Business activity via Graph API

给你一囗甜甜゛ 提交于 2019-12-25 06:42:38

问题


Alright, so after chatting with Microsoft "Professional Support" they couldn't help me. Told me to access the reports via the SfB Report GUI and export to Excel.

Yeah that's completely worthless to me. After doing a lot more reading, my 1st example to authenticate was out of date.

Now I have a fully functional oAuth2 PowerShell script that gets me a valid token.

But I'm having the same issue when I use the Graph Explorer (403 Forbidden). I know the token is working because I can query other information \ if I take away the VAR for the token from the GET header it errors stating the the Bearer Token is empty so everything is right.

Microsoft, if you're out there can someone please confirm that the SfB Report API is up and running for the statistics I'm attempting to pull?

UPDATED SCRIPT

#Obtaining oAuth2 Token from Microsoft Azure \ communicate with Microsoft Graph API

$ClientID = "MyID"
$client_Secret = "MySecretKey"

#Define URI for Azure Tenant
$Uri = "https://login.microsoftonline.com/MyTenantID/oauth2/token"

#Define Microsoft Graph - Skype for Business reports interface URI
$exportSfB = "https://graph.microsoft.com/beta/reports/SfbActivity(view='Detail',date='2017-04-11')/content"

#Define the body of the request
$Body = @{grant_type='client_credentials';client_id=$ClientID;client_secret=$client_secret;resource='https://graph.microsoft.com'}

#Define the content type for the request
$ContentType = "application/x-www-form-urlencoded"

#Invoke REST method.  This handles the deserialization of the JSON result.  Less effort than invoke-webrequest
$admAuth=Invoke-RestMethod -Uri $Uri -Body $Body -Method Post

#Construct the header value with the access_token just recieved
$HeaderValue = "Bearer " + $admauth.access_token

#Query Microsoft Graph with new Token
$result = Invoke-RestMethod -Headers @{Authorization=$HeaderValue} -Uri $exportSfB –Method Get -Verbose

#Results should be a .CSV
$result.string.'#text'

ORIGINAL THREAD Can someone please have a look at this REST code and tell me what they think?

I'm receiving:

Invoke-RestMethod : The remote server returned an error: (400) Bad Request.

  • CategoryInfo : InvalidOperation

I haven't been able to pull a single Skype for Business activity report using Graph.

$tenant = "MyTenant.onmicrosoft.com"

function GetAuthToken
{
       param
       (
              [Parameter(Mandatory=$true)]
              $TenantName
       )
 
       $adal = "${env:ProgramFiles(x86)}\Microsoft SDKs\Azure\PowerShell\ServiceManagement\Azure\Services\Microsoft.IdentityModel.Clients.ActiveDirectory.dll"
 
       $adalforms = "${env:ProgramFiles(x86)}\Microsoft SDKs\Azure\PowerShell\ServiceManagement\Azure\Services\Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms.dll"
 
       [System.Reflection.Assembly]::LoadFrom($adal) | Out-Null
 
       [System.Reflection.Assembly]::LoadFrom($adalforms) | Out-Null
 
       $clientId = "MyID"
 
       $redirectUri = "urn:ietf:wg:oauth:2.0:oob"
 
       $resourceAppIdURI = "https://graph.microsoft.com/"
 
       $authority = "https://login.windows.net/$TenantName"
 
       $authContext = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext" -ArgumentList $authority
 
       $authResult = $authContext.AcquireToken($resourceAppIdURI, $clientId,$redirectUri, "Auto")
 
       return $authResult
}


# Set Token var

$token = GetAuthToken -TenantName $tenant

# Building Rest Api header with authorization token
$authHeader = @{
   'Content-Type'='application\json'
   'Authorization'=$token.CreateAuthorizationHeader()
}

$uri = "https://graph.microsoft.com/beta/reports/SfbActivity(view='Detail',date='2017-04-11')"

$output = (Invoke-RestMethod -Uri $uri –Headers $authHeader –Method Get –Verbose).value

回答1:


You're missing /content in your URI. See doc here.

$uri = "https://graph.microsoft.com/beta/reports/SfbActivity(view='Detail',date='2017-04-11')/content"



回答2:


Ok so after messing with the API and reading I decided to start over from scratch. Turns out the problem the entire time was the App type in Azure. I was using an app that someone had created prior to me taking on the project. It's application type was set to "Web \ API" in Azure which was incorrect apparently. I created a new App with application type "Native", altered my code with the new secret access key and application client ID and I was able to start pulling down .csv files. The problem now is that the PSTN data isn't there. I created a ticket with the Microsoft Graph group on GitHub requesting information about whether or not they're aware of this problem. At this time, I'm unable to find a programmatic method of exporting PSTN call details via the API. You can keep an eye on their progress here for that request but beyond that I'm stuck until Microsoft Dev makes the SfBActivity detail report include those data fields: https://github.com/microsoftgraph/microsoft-graph-docs/issues/1133



来源:https://stackoverflow.com/questions/43394129/error-400-bad-request-when-attempting-to-pull-skype-for-business-activity-via-gr

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!