【问题标题】:Sharepoint webhooks: Subscribing to a listSharepoint webhook:订阅列表
【发布时间】:2017-08-02 22:37:25
【问题描述】:

我正在尝试将应用程序订阅到 Sharepoint 列表。通知将通过 webhook 发送到应用程序。为此,您必须发出 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."
}

我认为问题不在于令牌,我们尝试了太多次才停止抛出与无效令牌数据相关的错误。

有没有办法调试这个错误?有什么建议么?

【问题讨论】:

    标签: azure sharepoint azure-active-directory webhooks


    【解决方案1】:

    最后,问题出在访问令牌上,我们能够获得正确的访问令牌。有两种方法可以做到这一点,这些方法适用于单租户应用程序。

    方法一:两步不发送 Azure 凭据(仅应用程序凭据)

    第 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
    

    方法二:一步,发送 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"
    

    【讨论】:

      猜你喜欢
      • 2023-03-04
      • 2018-11-29
      • 2020-12-05
      • 1970-01-01
      • 2014-05-01
      • 2017-08-11
      • 2020-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多