【问题标题】:Grant daemon process access to read user mail授予守护进程访问权限以读取用户邮件
【发布时间】:2019-01-22 19:01:20
【问题描述】:

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

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

我看到的一个选项是通过以 service_account2 身份登录并同意应用程序访问邮箱来从 /authorize 端点手动获取身份验证代码。这将为我提供可用于以编程方式获取 access_tokenrefresh_token 的身份验证代码,这样就可以了。

有没有办法在没有这个初始手动步骤的情况下以编程方式完成?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      您可以在 Azure AD 中为您的进程创建一个应用程序,然后使用 clientid 和客户端密码来访问所需的资源。对于邮箱,您的资源将类似于图形 api 下的 /users/{userPrincipalName}/mailfolders/inbox/messages。

      这是来自守护程序应用程序的客户端凭据授予流程示例 - 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,然后在 文本框。然后,单击选择权限并选择“TodoListAdmin”。 这将允许此客户端应用程序使用 TodoListAdmin 角色。

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

      【讨论】:

      • Neo99 客户端凭据流程对我不起作用,因为它将允许守护程序应用程序读取给定租户中任何邮箱的邮件。我想将其限制为仅给定的服务帐户。
      猜你喜欢
      • 1970-01-01
      • 2019-10-03
      • 1970-01-01
      • 1970-01-01
      • 2020-09-27
      • 2016-12-20
      • 1970-01-01
      • 1970-01-01
      • 2013-05-01
      相关资源
      最近更新 更多