我已经在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中可以进行的有关OneNote的操作数量是否有限制?
编辑:我发现还有两件事值得一提。 首先是,即使我的令牌没有运行,Graph Explorer仍然可以正常工作。我假设浏览器在使用用户名/密码时使用授权码流代表用户获取令牌,因此用户名/密码授权流可能与问题有关。第二件事是,今天的Graph API再次可用于OneNote端点,这意味着我的应用可能在一段时间(可能是24小时?)内无法执行OneNote操作。
答案 0 :(得分:0)
这也发生在我们身上,我将身份验证修改为以下内容,并且身份验证成功。
$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进行编码,否则将引发错误。