将 Graph API 与客户端凭证流结合使用 - HTTP 错误 400。请求标头字段太长

问题描述 投票:0回答:1

我在 Microsoft Entra ID 中注册了一个应用程序。该应用程序应该由守护程序软件用来在 MS Entra ID 和企业 SharePoint 中执行管理工作,它配置为“应用程序”类型的 API 权限: Microsoft.Graph 的 Directory.ReadWrite.All 和 Sites.FullControl.All。

应用程序已配置客户端凭据。

然后我在 C# 代码中使用 MS Graph API 和 GraphServiceClient (NuGet: Microsoft.Graph 5.41.0) 来发出请求。下面是一些伪代码。

ClientSecretCredential credential = new ClientSecretCredential(tenantID, clientID, clientSecret);

GraphServiceClient client = new GraphServiceClient(credential, new List<string>() { "https://graph.microsoft.com/.default" });

// Retrieving a list of SharePoint sites: 

Microsoft.Graph.Sites.GetAllSites.GetAllSitesGetResponse? response = await graphServiceClient.Sites.GetAllSites.GetAsGetAllSitesGetResponseAsync();

我收到以下错误:

错误请求 - 标头字段太长

HTTP 错误 400。请求标头字段太长

是的,我已检查该租户的访问令牌大小为 18 KB。

我将如何解决此类问题。该错误直接来自 MS Graph API。

寻找在线答案,唯一建议的解决方案是减少 API 权限。我不确定这是否是我真正能做的事情。这是对 Graph API 调用施加的奇怪限制。我想必须有一个解决方法,否则我如何创建一个守护程序应用程序来访问 MS Entra ID 中的不同类型的数据(如用户、组、应用程序、SharePoint 站点等)并执行复杂的管理任务?

任何帮助将不胜感激。

azure azure-active-directory microsoft-graph-api azure-ad-graph-api azure-entra-id
1个回答
0
投票

出现“错误请求 - 标头字段太长”错误通常表明请求标头的大小已超过最大允许限制。当访问令牌的大小超过指定阈值时,通常会出现这种情况。为了解决这个问题,一个可行的解决方案是使用证书代替客户端密钥来进行应用程序识别,这是特别推荐用于生产级应用程序的做法。或者,减少 API 权限的数量也可以缓解该问题。但是,如果减少权限不可行,则可以尝试通过将请求分段为更小的部分或利用支持更大标头大小的替代 API 端点来减轻错误。

参考资料: 客户端凭证流#确保应用程序的高可用性

授权请求被拒绝-graph-api#authorization_requestdenied-error-当您尝试使用-graph-api更改密码时

© www.soinside.com 2019 - 2024. All rights reserved.