使用MS Graph Docs尝试使用Access without user flow作为参考,从我的Office365邮箱获取电子邮件。我能够获得持票人令牌。 JWT的角色数组包含:
roles: [ "Mail.ReadWrite", "Mail.Read" ]
这是我正在使用的代码。它在“最后一行”上得到了400。
var web = new WebClient();
web.Headers.Add(HttpRequestHeader.ContentType, "application/x-www-form-urlencoded");
url = $"https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token";
var reqparm = new System.Collections.Specialized.NameValueCollection();
reqparm.Add("client_id", cliID);
reqparm.Add("scope", "https://graph.microsoft.com/.default");
reqparm.Add("client_secret", secret);
reqparm.Add("grant_type", "client_credentials");
var responsebytes = web.UploadValues(url, "POST", reqparm);
string responsebody = Encoding.UTF8.GetString(responsebytes);
var data = JsonConvert.DeserializeObject<RootObject>(responsebody);
web = new WebClient();
web.Headers.Add( HttpRequestHeader.Authorization, "Bearer " + data.access_token);
var url2 = "https://graph.microsoft.com/v1.0/me/messages";
var messages = web.DownloadString(url2);
为了确保WebClient不是GET以外的其他东西,我还尝试了一个带有method =“GET”的HttpWebRequest,结果相同。
这是POCO:
public class RootObject
{
public string token_type { get; set; }
public int expires_in { get; set; }
public string access_token { get; set; }
}
答案 0 :(得分:2)
在没有用户进行身份验证时,您无法使用/me
。这是因为图形的上下文中没有用户将/me
翻译成。
对于此方案,您需要指定要为其列出消息的user
资源:
https://graph.microsoft.com/v1.0/users/{userPrincipalName}/messages
答案 1 :(得分:1)
https://graph.microsoft.com/v1.0/users/{userPrincipalName}/messages
正如@MarcLeFleur所说,这是用户原则;所以我在电子邮件中尝试了用户名并且没有用。我使用完整的电子邮件地址作为委托人和中提琴!