2017-08-02 67 views
0

我试图订阅应用程序到Sharepoint列表。通知将通过webhook发送到应用程序。要做到这一点,你必须做出一个HTTP POST请求:Sharepoint webhooks:订阅列表

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:申请验证码。 访问此URL。它会将您重定向到在查询字符串中传递的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:一步,在发送天青凭证

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"