繁体   English   中英

如何使用 v1 Azure AD 应用程序和客户端凭据访问 Sharepoint 在线 API

[英]How to Access Sharepoint Online API with v1 Azure AD Application and Client Credentials

我无法使用 Postman 在线对 Sharepoint 进行 API 调用。 我已经成功地对图表 API 进行了 API 调用,所以我熟悉我认为这应该如何工作。

我已按照以下说明进行设置:

第一篇文章说它不会接受使用客户端密码生成的访问令牌,但我已经生成了带有密码和证书的令牌,并且没有发现任何区别。

调用任何东西时,例如:

https://<tenant>.sharepoint.com/_api/web

我得到错误:

{"error_description":"Exception of type 'Microsoft.IdentityModel.Tokens.AudienceUriValidationFailedException' was thrown."}

这是我使用 v1 /token 端点生成的访问令牌示例:

{
  "aud": "https://microsoft.sharepoint-df.com/",
  "iss": "https://sts.windows.net/462c0b***********c3708/",
  "iat": 1569243291,
  "nbf": 1569243291,
  "exp": 1569247191,
  "aio": "42FgYDiXt***********==",
  "app_displayname": "T***********n",
  "appid": "00c***********2b",
  "appidacr": "2",
  "idp": "https://sts.windows.net/46***********708/",
  "oid": "2f8a5***********684",
  "roles": [
    "User.ReadWrite.All",
    "TermStore.Read.All",
    "Sites.FullControl.All"
  ],
  "sid": "5ab8d57***********0bc",
  "sub": "2f8a5***********684",
  "tid": "462c0***********708",
  "uti": "aHt8d***********9AA",
  "ver": "1.0"
}

正如您在第一篇文章中看到的,使用客户端密钥生成的访问令牌不支持 SharePoint 的仅应用令牌身份验证。

如果你解码访问令牌,你会发现对于“appidacr”,如果使用客户端ID和客户端密码,则值为“1”。 如果使用客户端证书进行身份验证,则值为“2”。 在此处查看详细信息。

客户端证书比客户端密码更安全。 它提供双重验证和保护。

您可以参考这篇第 3 方文章,使用证书获取 Azure AD 仅限应用访问令牌,并使用此访问令牌访问您的 SharePoint 资源。

当然,您在评论中提到的文章也很有帮助。 它使用 ACS 来完成身份验证。

该错误消息似乎暗示我在 /token 端点调用中的资源参数设置不正确。 我相信微软文档中省略了这一点,因为文档是如此分裂。 V1 应用程序调用 SharePoint Online 的正确令牌端点调用如下所示:

Web 服务

POST https://login.microsoftonline.com/<TARGET-TENANT-ID OR NAME>/oauth2/token

参数

client_id= <Application ID from Azure Portal>
grant_type=client_credentials
resource= https://<TARGET-TENANT-NAME>.sharepoint.com
client_assertion_type= urn:ietf:params:oauth:client-assertion-type:jwt-bearer
client_assertion= <See Link Above to create assertion>

上面的链接省略了如何计算证书 JWT 的 x5t 值。 你可以使用这个:

echo $(openssl x509 -in certificate.pem -fingerprint -noout) | sed 's/SHA1 Fingerprint=//g' | sed 's/://g' | xxd -r -ps | base64

我从这里得到的: How to get value of "x5t" using Certificate credentials for application authentication

如果您尝试使用客户端密码而不是客户端断言,您将获得一个令牌,但 SharePoint 在线 REST API 将返回:

Unsupported app only token.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM