错误:AADSTS500011:在租户中找不到名为“URL”的资源主体

Posted

技术标签:

【中文标题】错误:AADSTS500011:在租户中找不到名为“URL”的资源主体【英文标题】:Error: AADSTS500011: The resource principal named "URL" was not found in the tenant 【发布时间】:2020-01-31 05:13:52 【问题描述】:

我正在尝试使用来自https://docs.microsoft.com/en-us/sharepoint/dev/spfx/web-parts/get-started/build-a-hello-world-web-part 的模板将应用程序添加到我们的 SharePoint Online 网站,当我们部署到 SharePoint 并将应用程序/Web 部件添加到测试 SharePoint 网站时,我们收到以下错误。我们使用 TypeScript 作为模板使用。

有没有其他人遇到过这个问题或者知道去哪里找这个问题?

找到 [object Object] 驱动程序显示外部错误:错误:AADSTS500011:在名为 7018324c-9efd-4880-809d-b2e6bb1606b6 的租户中找不到名为 https://driverdisplayexternal.azurewebsites.net 的资源主体。如果租户管理员未安装应用程序或租户中的任何用户未同意此应用程序,则可能会发生这种情况。您可能已将身份验证请求发送给错误的租户。跟踪 ID:358b22eb-cd2c-4091-b592-5a57cbc21d00 相关 ID:ec96d656-1a36-42e2-a2b9-3ff78efc1e2e 时间戳:2019-10-01 16:26:06Z

我们添加了对我们自己的客户的调用,如下所示。我们不确定为什么找不到资源主体。租户 ID 的匹配项似乎已正确设置以进行身份​​验证。

HelloWorldWebPart.ts

...
   this.context.aadHttpClientFactory
      .getClient('https://driverdisplayexternal.azurewebsites.net')
      .then((client: AadHttpClient): void => 

        client
          .get('https://driverdisplayexternal.azurewebsites.net/api/values', AadHttpClient.configurations.v1)
          .then((response: HttpClientResponse): Promise < Order[] > => 
            this.domElement.innerhtml += 'Received a response from Driver Display External: ' + response;
            return response.json();
          )

          .catch(error => 

            this.domElement.innerHTML += 'Driver Display External Error:  ' + error;
            console.error(error);
          );
      );
...

package-solution.json


  "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/package-solution.schema.json",
  "solution": 
    "name": "helloworld-webpart-client-side-solution",
    "id": "**ID**",
    "version": "4.1.0.0",
    "includeClientSideAssets": true,
    "isDomainIsolated": false,
    "webApiPermissionRequests": [
      
        "resource": "DriverDisplayExternal",
       "scope": "User.Read.All"
      
     ]
  ,
  "paths": 
    "zippedPackage": "solution/helloworld-webpart.sppkg"
  


非常感谢您对问题所在位置的任何帮助或指导。提前致谢!

【问题讨论】:

如果要调用受Azure AD保护的服务,资源url必须是Azure AD应用的app id url。更多详情请参考***.com/questions/36059051/… @JimXu 我试过了,不幸的是没有用。谢谢你的建议。 能否告诉我是否可以从邮递员等其他工具调用该api? 是的,我们可以使用邮递员。我的同事创建了一个新应用程序,它以不同的方式获取我们需要的东西,但遗憾的是我们仍然没有解决这个问题。 你是用 Azure AD 保护你的 api 吗?如果是这样,您能否告诉我您用于保护 API 的 AD 应用程序的租户和 SharePoint 的租户是否相同? 【参考方案1】:

从未使用过此 API,但如果我不得不猜测您需要在此处更改值:

      .getClient('https://driverdisplayexternal.azurewebsites.net')

您可以使用客户端 ID/应用程序 ID,或应用程序 ID URI。

【讨论】:

感谢 Juunas 的快速响应。我试图输入我的客户端 ID/应用程序 ID,但收到了不同的错误。 “TypeError:无法获取”。我不相信这更接近,但我很感激这个建议! 输入在 Azure 中注册的应用程序的应用程序/客户端 ID,其中包含自定义权限范围为我修复了它。所以即 .getClient('application id guid') 尝试使用应用程序/客户端 ID,但不幸的是没有用。还是卡住了。【参考方案2】:

不确定您是否找到了答案。当您使用 SPFx 请求您自己的自定义 Web api 端点时。有几个步骤:

请求权限,以便您可以转到 SPO 管理员来批准您请求的权限。对于这种情况,webApiPermissionRequests->resources 需要您的 AAD 应用程序的服务主体显示名称。创建 AAD 应用程序后,您可以运行 Get-AzureADServicePrincipal 来获取所有 ServicePrincipal。 一旦您请求权限,您需要从您的代码中调用 AadHttpClient.getClient() 以根据您想要的 api resourceEndpoint 获取 aadHttpClient 对象,对于这种情况,您需要传递您的 Web api 的应用程序 ID URI,它可以可以从您的 AAD 应用程序清单 ->“identifierUris”中找到。一般来说,这应该类似于 api://[clientid] 格式。但您可以将其更改为任何唯一值。 我希望它有所帮助。

【讨论】:

【参考方案3】:

在我的情况下,当我使用 多租户 API 时,我必须使用 App Id。

【讨论】:

【参考方案4】:

当您为请求访问的范围或其他配置参数设置错误的名称时,有时可能会出现此问题。

我建议仔细检查范围名称,或者直接使用 Azure 门户中的“复制”按钮。

在我的例子中,这是一个简单的范围名称拼写错误。

【讨论】:

【参考方案5】:

在我的例子中,TenantId 和 ClientId 都可以。

他们可以找到in AAD。 TenantId 就在着陆页上:

然后在同一页面上单击Applications 然后标签All Applications 找到您的应用程序应该有ClientId 检查它们是否匹配。

如果还不够,请点击应用程序并查找角色

对我来说,在添加这些***后又缺少角色了:

【讨论】:

以上是关于错误:AADSTS500011:在租户中找不到名为“URL”的资源主体的主要内容,如果未能解决你的问题,请参考以下文章

AADSTS700016:在目录“some_another_id”中找不到标识符为“some_id”的应用程序

在 iWatch 错误中找不到名为“xx”的图像

发生了错误。 : 在应用程序配置文件中找不到名为“EmployeeDBEntities”的连接字符串

在此模型中找不到名为“Book”的实体。 ios核心数据错误?

在应用程序文件中找不到名为“...实体”的连接字符串,但它存在吗?

错误:在 server.js 中找不到模块“res”