Ich habe Probleme, meiner Anwendung die Berechtigungen zu geben, die für den Zugriff auf einen anderen Benutzer in den E-Mail-Nachrichten der Organisation erforderlich sind. Ich musste meinem Administrator alle möglichen Berechtigungen über das Azure-Portal erteilen und erhalte den Fehler "Zugriff verweigert" in der Testanwendung, die ich von der Graph-Website heruntergeladen habe. Das lässt mich denken, dass ich nicht den richtigen Aufruf der API verwende.Wie kann ich mit Microsoft Graph in einer MVC-App auf die Ressourcen eines anderen Benutzers (insbesondere E-Mails) zugreifen?
Hier ist der Code, den ich mit einer anderen E-Mail des Benutzers abzurufen:
IMailFolderMessagesCollectionPage messages = await graphClient.Users["userID"].MailFolders.Inbox.Messages.Request().Top(25).GetAsync();
wo „userID“ ist die ID-Wert ich davon ab, alle Benutzer in meiner Organisation durch den Graphen-Explorer erhalten.
Voll Code:
(Controller)
[Authorize]
public async Task<ActionResult> GetEmails()
{
try
{
// Initialize the GraphServiceClient.
GraphServiceClient graphClient = SDKHelper.GetAuthenticatedClient();
ResultsViewModel results = new ResultsViewModel();
// Get the messages.
results.Items = await graphService.GetMyInboxMessages(graphClient);
return View("Graph", results);
}
catch (ServiceException se)
{
if (se.Error.Code == Resource.Error_AuthChallengeNeeded) return new EmptyResult();
return RedirectToAction("Index", "Error", new { message = Resource.Error_Message + Request.RawUrl + ": " + se.Error.Message });
}
}
(graphService.cs)
public async Task<List<ResultsItem>> GetMyInboxMessages(GraphServiceClient graphClient)
{
List<ResultsItem> items = new List<ResultsItem>();
// Get messages in the Inbox folder.
//IMailFolderMessagesCollectionPage messages = await graphClient.Me.MailFolders.Inbox.Messages.Request().GetAsync();
IMailFolderMessagesCollectionPage messages = await graphClient.Users["e87151ce-093b-4820-a98c-4cef247ed2be"].MailFolders.Inbox.Messages.Request().Top(25).GetAsync();
string recipients = string.Empty;
if (messages?.Count > 0)
{
foreach (Message message in messages)
{
//foreach (Recipient recipient in message.ToRecipients)
for (int i = 0; i < message.ToRecipients.Count(); i++)
recipients += ((i != 0 ? "; " : "") + message.ToRecipients.ElementAt(i).EmailAddress.Address.ToString());
items.Add(new ResultsItem
{
Type = "message",
SentDateTime = message.SentDateTime.Value.DateTime.ToLocalTime(),
Subject = message.Subject,
From = message.From.EmailAddress.Address.ToString(),
To = recipients,
Id = message.Id,
Body = message.Body.Content.ToString()
});
}
}
return items;
}
Ist dies eine falsche GET-Anfrage? Oder ist es ein Berechtigungsproblem?
Vielen Dank im Voraus für Ihre Hilfe.
Können Sie die Ansprüche in Ihrem Token teilen? Sie können eine [Website wie diese] (http://jwt.calebb.net/) verwenden, um Ihr Token zu dekodieren. –