该错误通常是因为尝试使用客户端凭据进行Microsoft Graph API调用时使用了错误的身份验证流程。客户端凭据只能与应用程序的令牌进行身份验证,而不能使用用户令牌。因此,必须更改代码以使用正确的身份验证流程。
以下是一个示例,演示如何使用Microsoft Graph SDK和客户端凭据进行身份验证:
string clientId = "";
string clientSecret = "";
string tenantId = "";
ConfidentialClientApplication app = new ConfidentialClientApplication(
clientId,
$"https://login.microsoftonline.com/{tenantId}/",
new ClientCredential(clientSecret),
null,
null);
ClientCredentialProvider authProvider = new ClientCredentialProvider(app);
GraphServiceClient graphClient = new GraphServiceClient(authProvider);
var user = await graphClient.Me.Request().GetAsync();
请注意,上述代码使用ClientCredentialProvider
类而不是DelegateAuthenticationProvider
类。这是因为我们使用的是客户端凭据进行身份验证,而不是用户令牌。
如果您正在使用自己的HTTP请求调用Microsoft Graph API,则需要在请求标头中包括身份验证标记。下面是一个示例:
string clientId = "";
string clientSecret = "";
string tenantId = "";
string authUrl = $"https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token";
HttpClient client = new HttpClient();
List> postData = new List>();
postData.Add(new KeyValuePair("client_id", clientId));
postData.Add(new KeyValuePair("client_secret", clientSecret));
postData.Add(new KeyValuePair("grant_type", "client_credentials"));
postData.Add(new KeyValuePair("scope", "https://graph.microsoft.com/.default"));
FormUrlEncodedContent content = new FormUrlEncodedContent(postData);
HttpResponseMessage