【问题标题】:MS Graph API and DriveItem search not working with client credentials flowMS Graph API 和 DriveItem 搜索不适用于客户端凭据流
【发布时间】:2019-02-12 10:36:28
【问题描述】:

我正在尝试调用驱动器上 OneDrive API 的搜索端点(即https://graph.microsoft.com/v1.0/drives/{drive-id}/root/search(q='mysearchterm'). 这在 Graph Explorer 上运行良好,但是,我没有在同一驱动器上使用客户端凭据流获得任何搜索结果。

我的应用注册具有 API 文档(Files.Read.AllFiles.ReadWrite.AllSites.Read.AllSites.ReadWrite.All)中提到的所有必需的应用程序权限,并且读取驱动器、驱动器项、下载驱动器项都可以正常工作。不工作的一件事是搜索驱动器项目。我只是得到一个空数组,没有错误;

{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)","value":[]}

我将 adal-nodeacquireTokenWithClientCredentials 一起使用。

var adal = require("adal-node");

const TENANT = "{tenant-name-here}.onmicrosoft.com";
const CLIENT_ID = "{Application-id-here}";
const CLIENT_SECRET = "{Application-key-here}";

function getToken() {
  return new Promise((resolve, reject) => {
    const authContext = new adal.AuthenticationContext(
      `https://login.microsoftonline.com/${TENANT}`
    );

    authContext.acquireTokenWithClientCredentials(
      GRAPH_URL,
      CLIENT_ID,
      CLIENT_SECRET,
      (err, tokenRes) => {
        if (err) {
          reject(err);
        }
        resolve(tokenRes.accessToken);
      }
    );
  });
}

我正在搜索的驱动器是 SharePoint 文档库。

【问题讨论】:

    标签: node.js microsoft-graph-api onedrive adal


    【解决方案1】:

    一些重要提示:客户端凭据流需要在Azure Management Portal 中注册应用程序而不是Applicaation Registeration Portal。 Graph Explorer 主要是基于后者,所以他们现在有不同的后端代码是正常的。也许他们以后会做同样的逻辑。

    我们强烈建议您使用 Microsoft Graph 而不是 Azure AD Graph API 来访问 Azure Active Directory 资源。我们的开发工作现在集中在 Microsoft Graph 上,并且没有计划对 Azure AD Graph API 进行进一步的增强。 Azure AD Graph API 可能仍然适用的场景数量非常有限;有关详细信息,请参阅 Office 开发中心的 Microsoft Graph 或 Azure AD Graph 博客文章。

    adal-node 与 Graph 不同,因此您在图形资源管理器中获得结果,而不是在 NodeJS 产品中获得结果。我们建议您使用最新的 Graph API。

    官方文档:https://docs.microsoft.com/en-us/javascript/api/overview/azure/activedirectory?view=azure-node-latest

    【讨论】:

    • 我实际上使用的是 Microsoft Graph 而不是 Azure AD Graph API。我只提供 adal-node 的代码示例,以明确客户端凭据流提供的结果与 Graph API Explorer 网站提供的结果不同。用于请求的 URL 100% 相同,只是响应不同。
    • 它们的后端代码不一样,所以返回值也有一些不同。大多数情况下,使用 Azure AD Graph API 中的令牌不适用于最新的 Graph API。
    • 我不确定我们是否在同一条道路上。这里没有使用 Azure AD Graph API。 Microsoft Graph API 用于搜索 DriveItems(在我的代码和 Graph API Explorer 中,graph-explorer)。身份验证基于 OAuth 客户端凭据流以及 Azure AD 颁发的令牌。所以根本没有 Azure AD Graph API。
    • 所以你需要提供你实际使用的代码,而不是adal-node代码。代码会误导想要帮助你的人。
    • 上面提到的 adal-node 代码是指基于 OAuth 2.0 凭据流通过 Azure AD 获取不记名令牌。它的目的是说明身份验证方法,因为我的假设是这是整个问题的一部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 2020-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多