使用标准用户帐户下载基于订阅的邮件

时间:2018-10-23 10:40:55

标签: azure microsoft-graph outlook-restapi

我想知道是否可以使用标准用户帐户根据订阅下载邮件。

背景:

我已经在Azure上注册了一个应用程序,以拥有一个应用程序ID和一个机密。
我使用此凭据创建传入邮件的订阅。通知将发送到服务器,由服务器提取并下载邮件内容。

这一切都很好,但是使用App ID和密码使我可以访问所有邮箱,这可能是安全问题。

为解决这个问题,我寻找了两个选择,但没有找到很多东西:

  1. 将应用程序ID的访问权限限制为某些邮箱->我认为这是不可能的
  2. 创建一种超级用户并与该用户共享所有邮箱,并使用该用户凭据根据传入的通知下载邮件内容

有人尝试过解决方案2还是可以指导我阅读某些文档?
据我所知,只能进行交互式用户登录吗?

1 个答案:

答案 0 :(得分:0)

这是使用客户端凭据的副作用。由于您是在验证应用而不是用户的身份(您经常会听到以下内容:仅应用应用+用户)。当您对应用程序进行身份验证时,它实际上是受限的超级用户(对于您同意的范围,超级用户而言为“受限”)。

共享邮箱(通常称为“服务帐户”)模型可以工作,但它可能非常脆弱。您需要构建一种机制,以在/访问令牌与访问令牌刷新时(如果出现异常)重新验证该帐户。您还需要一种机制来通知您发生了什么事情,并实施了可靠的流程,以便您本人以外的其他人可以在2年后重新设置。由于您需要引导每个用户共享他们的邮箱(对于大多数用户而言,这并不是完全熟悉的工作流程),因此这也带来了支持上的麻烦。

我会要求他们授权应用程序,而不是要求每个用户都执行共享工作流程。然后,您为每个用户使用单独的app + user令牌设置订阅。该模型确实需要与上述相同的机制,但是它们以自助服务为重点,因此在记住几年后如何设置时不再依赖IT。

为此,您需要站起来一些要素:

  • 您需要一个描述正在发生的事情的网页,并显示一个“使用Microsoft登录”按钮来对用户进行身份验证。

  • 您需要一个供用户在完成该过程后登录的网页(即“谢谢”页面)。

  • 您需要安全地为每个用户存储“刷新”令牌。这没有听起来那么危险,因为任何恶意黑客都需要两者您的客户密码和刷新令牌。

  • 您需要一种机制来捕获失败或丢失的刷新令牌,并向用户发送电子邮件,以更改需要重新认证的令牌。

工作流程如下:

  1. 用户通过您的服务进行身份验证
  2. 使用初始访问令牌来设置订阅
  3. 刷新令牌已存储。
  4. 收到通知时,服务将执行Refresh令牌并检索消息。
  5. 第4步返回了新的刷新令牌,因此您还需要替换以前在第3步中存储的令牌。

在提取邮件时,我还会考虑使用/delta。这样一来,您仅可以获得自上次执行/delta以来到达的消息。它使用“增量令牌”来跟踪已处理的消息。您可以将此令牌与“刷新”令牌一起存储(我也将订阅元数据也存储在其中)。

这是一个复杂的过程,而Stack Overflow并不是这些的最佳论坛。如果您不满意此模型,请告诉我,我们可以开始聊天并进行Q&A的带外讨论(如果以后需要,我可以随时更新此答案)。