C# 授予守护进程读取用户邮件的权限

C# 授予守护进程读取用户邮件的权限,c#,oauth-2.0,azure-active-directory,access-token,C#,Oauth 2.0,Azure Active Directory,Access Token,我们有一个控制台应用程序,希望在服务帐户1的上下文中按计划运行 应用程序需要使用Graph API访问Outlook帐户,以便service_account2,并读取收到的电子邮件 我正在尝试找出访问service_account2邮箱的方法,而无需用户干预和跳过同意屏幕 我看到的一个选项是,通过以服务帐户2身份登录并同意应用程序访问邮箱,从/authorize端点手动获取身份验证代码。这将为我提供身份验证代码,我可以使用该代码以编程方式获取访问\u令牌和刷新\u令牌,这就完成了 是否有一种方法

我们有一个控制台应用程序,希望在服务帐户1的上下文中按计划运行
应用程序需要使用Graph API访问Outlook帐户,以便service_account2,并读取收到的电子邮件

我正在尝试找出访问service_account2邮箱的方法,而无需用户干预和跳过同意屏幕

我看到的一个选项是,通过以服务帐户2身份登录并同意应用程序访问邮箱,从/authorize端点手动获取身份验证代码。这将为我提供身份验证代码,我可以使用该代码以编程方式获取访问\u令牌刷新\u令牌,这就完成了


是否有一种方法可以通过编程方式完成此操作,而无需执行此初始手动步骤?

对于不希望用户显式登录的守护进程/控制台应用程序,可以使用客户端凭据授予

您可以在Azure AD中为流程创建应用程序,然后使用clientid和client secret访问所需资源。对于邮箱,您的资源类似于graph api下的/users/{userPrincipalName}/mailfolders/inbox/messages

以下是来自守护程序应用程序的客户端凭据授予流的示例-

具体避免明确同意部分,请参见本链接下的步骤9、10-

步骤将“TodoListService”作为示例api引用,但在您的示例中,我想它将是图形

为应用程序配置权限。在这种程度上,在 设置菜单,选择“所需权限”部分,然后, 单击Add,然后选择一个API,并在 文本框。然后,单击选择权限并选择“TodoListAdmin”。 这将允许此客户端应用使用访问服务应用 TodoListAdmin角色

在此阶段,权限分配正确,但客户端应用程序是 守护进程服务,因此它无法通过UI接受使用 服务应用程序。要避免这种情况,请单击“授予” “权限”,它将在管理员处接受应用程序的许可 水平


回答晚了,但这可能会有帮助。我曾遇到过类似的情况,我想使用守护程序从共享邮箱读取,但我所在组织的管理员不允许使用Mail.read权限,因为它具有从所有邮箱读取的功能。我不得不限制应用程序只有一个邮箱,以获得管理员的同意

有一个选项可以将应用程序权限范围限定到特定邮箱。这样可以确保您不会从任何其他邮箱读取内容,而只从允许您读取的邮箱读取内容。我在守护进程中使用了客户端凭据流


检查此处的文档-

Neo99客户端凭据流对我不起作用,因为它将允许守护程序应用程序读取给定租户中任何邮箱的邮件。我想把它限制为一个给定的服务帐户。