【问题标题】:401 Unauthorized on Graph and OneNote API after getting token succesfully401 Unauthorized on Graph and OneNote API 获取token成功后
【发布时间】:2018-12-05 16:27:57
【问题描述】:

我在 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 ADAL AuthenticationContext.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 操作。

【问题讨论】:

  • 您好 Lucas,我​​是 OneNote 团队的工程师。我认为您在这里没有做错任何事情,并且很乐意与您一起调试 - 您可以在这里请求帮助以便我们开始对话吗?您将其命名为“调用 OneNote API 时出现问题”并将此问题的内容粘贴为描述。 aka.ms/onenotesupport
  • 完成此操作后请告诉我,以便我们开始调试。
  • @JorgeAguirre 感谢 Jorge,我已请求有关该链接的帮助。但是,描述有一个简短的字符限制,所以我对问题进行了简短描述,并粘贴了指向此问题副本的链接以获取更多详细信息。另外,请检查我的问题的编辑,因为我发现了两个可能有助于找到问题原因的新内容
  • 听起来您被限制了,尽管该消息暗示您在请求中缺少 Authorization 标头。 OneNote 确实将您的应用程序限制/限制为 5 个并发连接。你能包括你正在使用的代码吗?来自 Fiddler 的 HTTP 跟踪也会有所帮助。
  • 卢卡斯,我已经在帮助台讨论中回复了你。这并不完全是节流,但它非常相似。我们已经更改了我们的服务,以便减少发生限制的可能性,并且如果确实发生了,您会得到一个清晰的错误代码(与身份验证错误不同)

标签: azure-active-directory microsoft-graph-api adal onenote onenote-api


【解决方案1】:

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

$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 已编码,否则将引发错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-16
    • 2017-07-12
    • 1970-01-01
    • 2020-07-01
    • 2017-09-04
    • 1970-01-01
    相关资源
    最近更新 更多