Microsoft Graph-FindMeetingTimes-无法发出请求

时间:2019-07-14 23:36:56

标签: microsoft-graph

对于图API中的大多数API调用,我可以使用下面的代码来检索访问令牌,然后向该API发出请求,并且成功:

$resourceUrl = 'https%3A%2F%2Fgraph.microsoft.com%2F.default'
    $body = "client_id=CLIENTID&scope=https://graph.microsoft.com/.default&client_secret={0}&grant_type=client_credentials" -f "TOKEN"
    $auth = Invoke-RestMethod -Uri 'https://login.microsoftonline.com/TENANT/oauth2/v2.0/token' -Body $body -Method post -Verbose
    $accesstoken = $auth.access_token

但是,使用FindMeetingTimes API时,每当尝试发出POST请求时,都会收到错误400。通过powershell可以很好地使用来自图资源管理器的令牌而不是具有相同API请求的令牌。

我假设这是由于它需要委派权限,是否有一种方法可以检索访问令牌,而无需用户事先登录,我可以为此使用该调用令牌?因为这是在后台运行的服务。

谢谢。

1 个答案:

答案 0 :(得分:1)

一种解决方法是使用resource owner password credential grant获取访问令牌。

  1. 为Azure AD中的应用程序选择所需的委派权限。
  2. 必要时给予管理员同意。
  3. 获取令牌

这是我的样品:

$scope="https://graph.microsoft.com/.default";
$grant_type="password";
$username="your account id, jack@hanxia.onmicrosoft.com";
$password="your account password";
$client_id="your client id, dc****96-****-****-****-ea****6da5e7";
$client_secret="1YWt*******************21";


$body = @{
    scope  = $scope
    grant_type = $grant_type
    username = $username
    password = $password
    client_id = $client_id
    client_secret = $client_secret
}

$auth = Invoke-RestMethod -Uri 'https://login.microsoftonline.com/{your_tenant_name_or_id}/oauth2/v2.0/token' -Body $body -Method post -Verbose
$auth.access_token

还有另一种方法。它是使用刷新令牌获取新的访问令牌。这是有关它的官方文档:Refresh the access token