授予守护程序进程访问读取用户邮件的权限

时间:2018-08-15 21:13:19

标签: c# oauth-2.0 azure-active-directory access-token

我们有一个控制台应用程序,希望在 service_account1 的上下文中按计划运行。
该应用程序需要使用Graph API访问 service_account2 的Outlook帐户并阅读传入的电子邮件。

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

我看到的一个选择是,通过以 service_account2 身份登录并同意应用程序对邮箱的访问,从 / authorize 端点手动获取身份验证代码。这将为我提供身份验证代码,我可以使用它们以编程方式获取 access_token refresh_token ,这将达到目的。

有没有一种方法可以以编程方式做到这一点,而无需进行初始手动操作?

2 个答案:

答案 0 :(得分:1)

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

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

以下是来自守护程序app-https://github.com/Azure-Samples/active-directory-dotnet-daemon/blob/master/README.md

的客户端凭据授予流程示例

具体为避免显式同意部分,请参阅此链接下的步骤9、10-https://github.com/Azure-Samples/active-directory-dotnet-daemon/blob/master/README.md#step-2--register-the-sample-with-your-azure-active-directory-tenant

步骤将“ TodoListService”称为示例api,但在您的情况下,我想是图形。

  

为您的应用程序配置权限。就此而言,   设置菜单,选择“所需权限”部分,然后,   单击添加,然后选择一个API,然后在中输入TodoListService   文本框。然后,单击“选择权限”,然后选择“ TodoListAdmin”。   这将允许该客户端应用使用以下命令访问服务应用   TodoListAdmin角色。

     

在此阶段,权限分配正确,但客户端应用是   守护程序服务,因此它无法通过UI接受使用   服务应用程序。为避免这种情况,请点击“授予   权限”,将在管理员处接受该应用程序的同意   级别。

答案 1 :(得分:0)

最新答案,但可能会对某人有所帮助。我遇到过类似的情况,我想使用守护程序从共享邮箱中读取内容,但是我组织中的管理员不允许Mail.Read权限,因为它具有从所有邮箱中读取功能。我必须将应用程序限制为只有一个邮箱才能获得管理员的同意。

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

在此处查看文档-https://docs.microsoft.com/en-us/graph/auth-limit-mailbox-access