首页 > 解决方案 > 401 Unauthorized on Graph and OneNote API 获取token成功后

问题描述

我在 Azure Active Directory 上注册了一个本机应用程序,并授予了 Graph 和 OneNote API 的所有权限,代表用户使用用户名和密码凭据成功获取令牌。我已经能够使用这些令牌创建和更新笔记本并在图形上执行其他操作,但是尽管发出这些请求的代码没有更改,但它们突然停止工作。

我仍然可以进行其他更改,例如在 SharePoint 上创建列表项,但是有关 OneNote 笔记本的任何操作都会导致 401 并具有以下响应:

{
  "error": {
    "code": "40001",
    "message": "The request does not contain a valid auth token.",
    "innerError": {
      "request-id": "472a74fd-c050-495a-9ec3-04d1ec3c4461",
      "date": "2018-06-26T20:49:28"
    }
  }
}

我已确认应用注册拥有 Graph 和 OneNote API 的所有权限

我已确认正在为正确的资源请求令牌。其实我用的是Graph,在Graph出现这个问题后切换到OneNote API,过了一会儿OneNote API也出现了同样的问题。

我尝试过使用 .NET ADALAuthenticationContext.AcquireTokenAsync(resource, ClientId, userCredential)或直接向https://login.windows.net/{tenantId}/oauth2/token以下主体发出请求,并且两者都具有相同的结果

"resource=" + resource
                + "&client_id=" + ClientId
                + "&grant_type=password"
                + "&username=" + Username
                + "&password=" + Password
                + "&scope=openid";

我尝试从对租户上的所有用户开放的 SharePoint 网站访问笔记本并遇到相同的问题,我尝试在用户个人 onedrive 上创建 OneNotes 并遇到相同的问题,所以这不是用户的问题可以访问笔记本

所以,我在 Graph API 上做了几十万次调用,然后这个问题就出现了。又在 OneNote API 上调用了几十万次,然后这个问题就出现了。对可能发生的事情有任何想法吗?在这些 API 中可以对 OneNotes 执行的操作数量是否有限制?

编辑:我发现还有两件事值得一提。首先是即使我的令牌没有,Graph Explorer 仍然正常工作。我假设资源管理器在我使用用户名/密码时代表用户使用授权代码流来获取令牌,因此用户名/密码授权流可能与该问题有关。第二件事是,今天 Graph API 再次适用于 OneNote 端点,这意味着我的应用程序可能在一段时间内(可能是 24 小时?)无法进行 OneNote 操作。

标签: azure-active-directorymicrosoft-graph-apiadalonenoteonenote-api

解决方案


这也发生在我们身上,我已将身份验证修改为以下,并且身份验证成功。

$body = "grant_type=client_credentials&client_id=CLIENTID&client_secret=CLIENTSECRET=&resource=https%3A%2F%2Fonenote.com%2F"

$auth = Invoke-RestMethod -Uri 'https://login.microsoftonline.com/TENANTNAME.onmicrosoft.com/oauth2/token' -Body $body -Method post -ContentType application/x-www-form-urlencoded
$accesstoken = $auth.access_token

只需确保客户端 ID 已编码,否则将引发错误。


推荐阅读