【问题标题】:Azure AD OAuth Authentication with ADAL: what's the resource ID?使用 ADAL 进行 Azure AD OAuth 身份验证:资源 ID 是什么?
【发布时间】:2023-03-25 18:01:01
【问题描述】:

我正在尝试从外部应用程序访问 SharePoint [Online] REST API。我已在 Azure 中以管理员帐户注册它并为其分配了适当的用户委派权限 (Office 365 SharePoint Online)。

我使用 ADAL.js 调用 acquireToken 并在我的 Authorization 标头中使用该令牌。附加了一个看起来有效的令牌,但我在响应中收到以下 401 错误:

Exception of type 'Microsoft.IdentityModel.Tokens.AudienceUriValidationFailedException' was thrown

acquireToken() 方法确实采用resource 参数,根据我在网上阅读的内容,SharePoint API 的这个值应该是https://[tenant].sharepoint.com,但它只返回一个null 不记名令牌。

我所做的(触发之前的 401 错误)只是将资源设置为在 Azure 中生成的应用 ID。这最终被设置为我的 localStorage 缓存中的令牌。所以那个不记名令牌确实返回了,但我得到了异常。

两个问题:

  1. 什么是资源字符串,以及在 acquireToken() 上调用的正确值是什么,看到使用我的应用程序 ID 调用它(与我在 ADAL 配置中使用的客户端 ID 相同)是唯一成功返回不记名令牌的值?每个 Microsoft API 是否都有适当的资源字符串列表?我一直无法找到有关此主题的文档。

  2. 我在 Azure 上的配置有问题吗?

谢谢!

【问题讨论】:

  • 你有想过这个吗?我有同样的问题。我看到返回了一个额外的响应头(x-ms-diagnostics: 3000003;reason="Invalid Audience Uri 'f8f8d2ad-7c9d-4aac-80eb-3f00a263c879'.";category="invalid_client")

标签: azure sharepoint oauth office365 adal


【解决方案1】:

要使用 SharePoint 在线 REST,我们可以使用发现服务 REST 来查找 SharePoint 服务端点。您可以从响应的 serviceResourceId 中找到所有服务资源 id。

您还可以考虑使用Microsoft Graph,它通过单个端点公开来自 Office 365 和其他 Microsoft 云服务的多个 API。

更多关于发现服务的REST API,可以参考here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 2015-08-09
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多