Microsoft graph api Microsoft Graph-FindMeetingTimes-无法发出请求

Microsoft graph api Microsoft Graph-FindMeetingTimes-无法发出请求,microsoft-graph-api,Microsoft Graph Api,对于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_credent

对于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使用graph explorer中的令牌(而不是我的令牌)可以很好地满足相同的API请求

我假设这是因为它需要委托权限,有没有一种方法可以检索访问令牌,我可以为此调用此端点,而无需用户事先登录?因为这是一个在后台运行的服务

谢谢

一种解决方法是使用获取访问令牌

  • 在Azure AD中为您的应用程序选择所需的委派权限
  • 如有必要,授予管理员许可
  • 领取代币
  • 这是我的样本:

    $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
    

    还有另一种方法。使用刷新令牌获取新的访问令牌。这是关于它的官方文件:

    @AlexP我很高兴它能帮上忙!