【问题标题】:Resource Not Found While fetching contacts from MS Graph API从 MS Graph API 获取联系人时未找到资源
【发布时间】:2019-03-02 18:00:04
【问题描述】:

我尝试了下面的 github 示例进行 Azure AD 身份验证,并成功获取了具有正确回调 URL 的访问令牌。

https://github.com/Microsoft/BotBuilder-Samples/tree/master/samples/csharp_dotnetcore/18.bot-authentication

根据我在 https://apps.dev.microsoft.com 中创建的应用程序修改和配置 Web.config 密钥

  <add key="ActiveDirectory.Mode" value="v1" />
<add key="ActiveDirectory.ResourceId" value="https://graph.microsoft.com" />
<add key="ActiveDirectory.EndpointUrl" value="https://login.microsoftonline.com" />
<add key="ActiveDirectory.Tenant" value="xyz-xyz" />
<add key="ActiveDirectory.ClientId" value="xyz-xyz" />
<add key="ActiveDirectory.ClientSecret" value="xyz-xyz" />
 <add key="ActiveDirectory.RedirectUrl" value="http://localhost:3979/api/Callback" />
<add key="ActiveDirectory.Scopes" value="Calendars.Read,Calendars.ReadWrite,Contacts.Read,Contacts.ReadWrite,Mail.Read,Mail.ReadWrite,User.Read" />

我已检查收到jwt.ms 的访问令牌。它是一个有效的令牌,其范围与我在 web.config 中定义的完全一致。

我可以通过传递令牌从 API 获取用户配置文件数据,但是在尝试调用用户的“联系人”时,我遇到了以下错误。

{
"error": {
    "code": "ResourceNotFound",
    "message": "Resource could not be discovered.",
    "innerError": {
        "request-id": "6f0f3ec9-76c9-4662-ac25-0bc73f887268",
        "date": "2019-03-02T17:23:35"
    }
}

}

代码调用 Contact API 调用。

   //Get Logged in user contacts
    public async Task<IUserContactsCollectionPage> GetMyContactsAsync()
    {
        var graphClient = GetAuthenticatedClient();
        IUserContactsCollectionPage contacts = await graphClient.Me.Contacts.Request().GetAsync();
        return contacts;
    }

仅供参考:在模拟器中显示的登录卡授权示例 URL 如下所示

https://login.microsoftonline.com/a76b43b0-3088-4c56-ba0d-01f317b1f18c/oauth2/authorize?resource=https:%2F%2Fgraph.microsoft.com&client_id=XYZ&response_type=code&haschrome=1&redirect_uri=http:%2F%2Flocalhost:3979%2Fapi%2FCallback&x-client-SKU=PCL.Desktop&x-client-Ver=3.13.9.1126&x-client-CPU=x64&x-client-OS=Microsoft+Windows+NT+10.0.16299.0&state=<stateID>

【问题讨论】:

  • 如果您减少代码以等待 graphClient.Me.Request().GetAsync(); 是否会收到响应;
  • 您提到的请求是读取使用配置文件,我成功地获得了相同的响应。我也在邮递员中尝试使用有效令牌请求“我/联系人”,但出现同样的错误
  • 谢谢,请尝试使用 Fiddler 捕获对图形的实际调用 (graph.microsoft.com)。使用您在应用程序中使用的相同用户帐户登录Graph Explorer,然后尝试调用那个 URl,这会给您响应吗?
  • 是的,它给出了回应。不仅适用于联系人,也适用于照片。
  • @PavanKumarGVVS 还有什么我可以帮助你的吗?

标签: outlook azure-active-directory botframework microsoft-graph-api microsoft-graph-sdks


【解决方案1】:

这可能由于多种原因而发生,其中一个非常常见的问题是需要向您注册的应用授予权限。确保您已完成相应的步骤。

第 1 步:

登录您的门户并在应用注册下选择您的应用程序。 然后点击设置看下面的截图:

第 2 步:

点击设置后,新窗口将出现在右侧,点击所需权限菜单:请参见下面的屏幕截图:

第 3 步:

选择所需权限菜单并通过单击添加按钮分配您的权限 请参阅下面的快照:

第四步:

单击选择 API 选项,如下所示:

最后一步:

选择您想要的 API 并选中您想要访问的 API。完成权限后点击完成。在此步骤之后,您可以从您的应用程序访问所需的资源/范围。希望对你有帮助。谢谢。 请看下面的屏幕截图:

【讨论】:

  • 我已经完成了你提到的步骤。我什至为我需要的请求授予了应用程序和委托权限。
  • 请参阅使用 developer.microsoft.com/en-us/graph/docs/concepts/… REST API 访问 Exchange 混合部署中的邮箱,以检查是否满足 REST API 在混合环境中工作的所有要求
  • 您使用的是 V1.0 端点,请确保您没有为此使用 Microsoft 个人帐户。个人账号不支持V1.0
  • 有关更多详细信息,您可以查看 Microsoft graph API docs.microsoft.com/en-us/graph/known-issues 上的已知问题
  • 支持,但您需要Calendars.Read, Calendars.Read.Shared, Calendars.ReadWrite 专用权限请docs here
猜你喜欢
  • 2016-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-17
  • 2017-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多