Microsoft graph api 在Microsoft Graph中获取个人帐户支持的所有邮件列表吗?

Microsoft graph api 在Microsoft Graph中获取个人帐户支持的所有邮件列表吗?,microsoft-graph-api,Microsoft Graph Api,我已经在Azure Portal中创建了一个应用程序,并授予了读取用户数据和用户邮件的权限。但我在尝试获取邮件列表时出错 根据,我需要的应用程序权限是:Mail.ReadBasic.All、Mail.Read、Mail.ReadWrite。我承认了所有这些,但仍然得到了错误 在中,未提及应用程序类型权限中是否支持个人帐户 /// get access token HttpClient httpClient = new HttpClient(); httpClient.BaseAddress =

我已经在Azure Portal中创建了一个应用程序,并授予了读取用户数据和用户邮件的权限。但我在尝试获取邮件列表时出错

根据,我需要的应用程序权限是:Mail.ReadBasic.All、Mail.Read、Mail.ReadWrite。我承认了所有这些,但仍然得到了错误

在中,未提及应用程序类型权限中是否支持个人帐户

/// get access token
HttpClient httpClient = new HttpClient();
httpClient.BaseAddress = new Uri("https://login.microsoftonline.com/");

var stringContent = new FormUrlEncodedContent(new[]
{
    new KeyValuePair<string, string>("client_id", ClientID),
    new KeyValuePair<string, string>("scope", "https://graph.microsoft.com/.default"),
    new KeyValuePair<string, string>("client_secret", ClientSecret),
    new KeyValuePair<string, string>("grant_type", "client_credentials"),
});

var response = httpClient.PostAsync(TenantID + "/oauth2/v2.0/token", stringContent).GetAwaiter().GetResult().Content.ReadAsStringAsync().GetAwaiter().GetResult();
var auth_res_json = JObject.Parse(response);
var token = auth_res_json["access_token"].ToString();


/// now read user data
HttpClient httpClient2 = new HttpClient();
httpClient2.BaseAddress = new Uri("https://graph.microsoft.com/v1.0/");

httpClient2.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
var response2 = httpClient2.GetAsync("users/" + UserID + "/messages").GetAwaiter().GetResult();
var mails = JObject.Parse(response2.Content.ReadAsStringAsync().GetAwaiter().GetResult());
///获取访问令牌
HttpClient HttpClient=新HttpClient();
httpClient.BaseAddress=新Uri(“https://login.microsoftonline.com/");
var stringContent=new FormUrlEncodedContent(new[]
{
新的KeyValuePair(“客户端id”,客户端id),
新的KeyValuePair(“范围”https://graph.microsoft.com/.default"),
新的KeyValuePair(“客户端密码”,ClientSecret),
新的KeyValuePair(“授权类型”、“客户端凭据”),
});
var response=httpClient.PostAsync(TenantID+“/oauth2/v2.0/token”,stringContent.GetAwaiter().GetResult().Content.ReadAsStringAsync().GetAwaiter().GetResult();
var auth_res_json=JObject.Parse(响应);
var token=auth_res_json[“access_token”].ToString();
///现在读取用户数据
HttpClient httpClient2=新的HttpClient();
httpClient2.BaseAddress=新Uri(“https://graph.microsoft.com/v1.0/");
httpClient2.DefaultRequestHeaders.Authorization=新的AuthenticationHeaderValue(“承载者”,令牌);
var response2=httpClient2.GetAsync(“users/”+UserID+“/messages”).GetAwaiter().GetResult();
var mails=JObject.Parse(response2.Content.ReadAsStringAsync().GetAwaiter().GetResult());
注意,我正确地获得了访问令牌,这没有问题。 此外,我还可以正确地使用
httpClient2.GetAsync(“users/”+UserID)
获取用户数据,没有错误,结果也很好

我授予的权限如下:

添加的作用域包括:

我将这些作用域添加到我的应用程序中:


管理员同意他/她所属的整个租户的应用权限。
Microsoft帐户不是租户的一部分,据我所知,他们无法同意其唯一帐户的应用程序权限。
除此之外,当您调用令牌端点时,您提供的是租户ID,而不是公共的,这会告诉端点仅生成对此租户有效的令牌。
您应该切换到委派权限,并根据您正在构建的内容实施设备代码流(本机应用程序)或代理流(API)。
最后,您应该了解MSAL和MicrosoftGraphSDK库,它将为您节省大量的实现时间