我试图将应用程序订阅到Sharepoint列表。通知将通过webhooks发送到应用程序。为此,您必须发出HTTP POST请求:
https://{your-account}.sharepoint.com/_api/web/lists('{list-guid}')/subscriptions
体:
{
"resource": "{{ URL of the resource Id }}",
"notificationUrl" : "{{ URL of the endpoint that will process the webhooks }}",
"expirationDateTime" : "2017-09-27T00:00:00+00"
}
该呼叫需要访问令牌。我用这种方式获得了curl的令牌:
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d "client_id={{ Id of the application registered on Azure Active Directory }}&client_secret={{ Key added on Azure for the app }}&grant_type=client_credentials&resource=https%3A%2F%2F{{ My account }}.sharepoint.com" "https://login.microsoftonline.com/{{ Azure account tenant id}}/oauth2/token"
这将返回一个标记,该标记作为POST请求中的标题包含在内。不幸的是,此请求失败,错误代码为401.正文:
{
"error_description" : "The server was unable to process the request due to an internal error. For more information about the error, either turn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the <serviceDebug> configuration behavior) on the server in order to send the exception information back to the client, or turn on tracing as per the Microsoft .NET Framework SDK documentation and inspect the server trace logs."
}
我认为问题不是令牌,我们在停止抛出与无效令牌数据相关的错误之前尝试了太多次。
有没有办法调试此错误?有什么建议?
答案 0 :(得分:1)
最后,问题是访问令牌,我们能够获得正确的访问令牌。有两种方法可以做到,这些方法适用于单租户应用。
方法1:两步而不发送Azure凭据(仅限应用凭据)
第1步:申请验证码。 访问此网址。它会将您重定向到查询字符串中传递的redirect_uri,重定向的查询字符串将包含将用于请求令牌的代码。
https://login.microsoftonline.com/{{ Tenant id }}/oauth2/authorize?client_id={{ Application id }}&response_type=code&redirect_uri={{ URI of the application }}&response_mode=query&resource={{ Resource that you want to access}}&state=12345
资源示例:https%3A%2F%2Fyouraccount.sharepoint.com
第2步:申请令牌
curl -X POST -H "content-type: application/x-www-form-urlencoded" -d "grant_type=authorization_code&client_id={{ Application code }}&code={{ The code received in the last request }}&redirect_uri={{ Same redirect URI }}&resource={{ Same resource}}&client_secret={{ Application key }}" https://login.microsoftonline.com/{{ Tenant id }}/oauth2/token
方法2:一步,发送Azure凭据
curl -i -X POST -d "grant_type=password&resource={{ Resource id }}&client_id={{ App id }}&username={{ Azure username }}&password={{ Azure password }}" "https://login.windows.net/{{ Tenant id }}/oauth2/token"