C# 如何访问其他用户';在MVC应用程序中使用Microsoft Graph的资源(特别是电子邮件)?
我似乎在授予我的应用程序访问oranization电子邮件中其他用户所需的权限时遇到问题。我让我的管理员通过Azure门户授予我的应用程序所有可能的权限,我从Graph网站下载的测试应用程序中出现“访问被拒绝”错误。这让我觉得可能我没有使用正确的API调用 以下是我用来检索其他用户电子邮件的代码:C# 如何访问其他用户';在MVC应用程序中使用Microsoft Graph的资源(特别是电子邮件)?,c#,asp.net-mvc,azure,azure-active-directory,microsoft-graph-api,C#,Asp.net Mvc,Azure,Azure Active Directory,Microsoft Graph Api,我似乎在授予我的应用程序访问oranization电子邮件中其他用户所需的权限时遇到问题。我让我的管理员通过Azure门户授予我的应用程序所有可能的权限,我从Graph网站下载的测试应用程序中出现“访问被拒绝”错误。这让我觉得可能我没有使用正确的API调用 以下是我用来检索其他用户电子邮件的代码: IMailFolderMessagesCollectionPage messages = await graphClient.Users["userID"].MailFolders.Inbox.Mes
IMailFolderMessagesCollectionPage messages = await graphClient.Users["userID"].MailFolders.Inbox.Messages.Request().Top(25).GetAsync();
其中“userID”是我通过图形浏览器获取组织中所有用户的id值
完整代码:
(控制员)
[授权]
公共异步任务GetEmails()
{
尝试
{
//初始化GraphServiceClient。
GraphServiceClient graphClient=SDKHelper.GetAuthenticatedClient();
ResultsViewModel结果=新的ResultsViewModel();
//获取消息。
results.Items=wait graphService.GetMyInboxMessages(graphClient);
返回视图(“图形”,结果);
}
捕获(ServiceException se)
{
if(se.Error.Code==Resource.Error_authChallengeEded)返回新的EmptyResult();
返回RedirectToAction(“Index”,“Error”,new{message=Resource.Error\u message+Request.RawUrl+”:“+se.Error.message});
}
}
(graphService.cs)
公共异步任务GetMyInboxMessages(GraphServiceClient graphClient)
{
列表项=新列表();
//获取收件箱文件夹中的邮件。
//IMailFolderMessagesCollectionPage messages=Wait graphClient.Me.MailFolders.Inbox.messages.Request().GetAsync();
IMAILFOLDEMessagesCollectionPage messages=await graphClient.Users[“e87151ce-093b-4820-a98c-4cef247ed2be”]。MailFolders.Inbox.messages.Request().Top(25).GetAsync();
string recipients=string.Empty;
如果(消息?.Count>0)
{
foreach(消息中的消息)
{
//foreach(message.ToRecipients中的收件人)
for(int i=0;i
这是一个错误的GET请求吗?还是权限问题
提前感谢你的帮助 您可以使用
读取所有邮箱中的邮件
应用程序权限请求仅应用程序令牌(客户端凭据流),以访问Microsoft Graph。根据您的描述,您在azure portal(azure ad v1.0)中注册应用程序,您可以尝试以下步骤:
在所有邮箱中读取邮件应用程序权限:
授予权限
按钮,要求您的管理员为当前目录中的所有帐户授予权限(对应用程序权限进行管理员同意),如上图所示public class AzureAuthenticationProvider : IAuthenticationProvider
{
private string _azureDomain = "xxxx.onmicrosoft.com";
public async Task AuthenticateRequestAsync(HttpRequestMessage request)
{
try
{
string clientId = "xxxxx-xxxx-xxxx-xxxx-xxxxxxxx";
string clientSecret = "xxxxxxxxxxxxxxxxxxxxxxxxxx";
AuthenticationContext authContext = new AuthenticationContext("https://login.windows.net/" + _azureDomain + "/oauth2/token");
ClientCredential credentials = new ClientCredential(clientId, clientSecret);
AuthenticationResult authResult = await authContext.AcquireTokenAsync("https://graph.microsoft.com/", credentials);
request.Headers.Add("Authorization", "Bearer " + authResult.AccessToken);
}
catch (Exception ex)
{
}
}
}
如果您解码您的令牌,您将在角色
声明中找到Mail.Read
应用权限 GraphServiceClient graphClient = new GraphServiceClient(new AzureAuthenticationProvider());
//List<ResultsItem> items = new List<ResultsItem>();
IMailFolderMessagesCollectionPage messages = await graphClient.Users["77cac441-8279-452e-8904-ff24ddf5c715"].MailFolders.Inbox.Messages.Request().Top(25).GetAsync();
GraphServiceClient-graphClient=new-GraphServiceClient(new-AzureAuthenticationProvider());
//列表项=新列表();
IMailFolderMessagesCollectionPage messages=Wait graphClient.Users[“77cac441-8279-452e-8904-ff24ddf5c715”]。MailFolders.Inbox.messages.Request();
您可以在您的代币内共享这些声明吗?您可以使用解码令牌。我缺少的密钥是
用户[]
,您可以继续为用户[]执行此操作。消息[]
,等等……我真希望他们在SDK文档中给出此示例。谢谢
public class AzureAuthenticationProvider : IAuthenticationProvider
{
private string _azureDomain = "xxxx.onmicrosoft.com";
public async Task AuthenticateRequestAsync(HttpRequestMessage request)
{
try
{
string clientId = "xxxxx-xxxx-xxxx-xxxx-xxxxxxxx";
string clientSecret = "xxxxxxxxxxxxxxxxxxxxxxxxxx";
AuthenticationContext authContext = new AuthenticationContext("https://login.windows.net/" + _azureDomain + "/oauth2/token");
ClientCredential credentials = new ClientCredential(clientId, clientSecret);
AuthenticationResult authResult = await authContext.AcquireTokenAsync("https://graph.microsoft.com/", credentials);
request.Headers.Add("Authorization", "Bearer " + authResult.AccessToken);
}
catch (Exception ex)
{
}
}
}
GraphServiceClient graphClient = new GraphServiceClient(new AzureAuthenticationProvider());
//List<ResultsItem> items = new List<ResultsItem>();
IMailFolderMessagesCollectionPage messages = await graphClient.Users["77cac441-8279-452e-8904-ff24ddf5c715"].MailFolders.Inbox.Messages.Request().Top(25).GetAsync();