NT 服务等后台应用程序如何与 Office 365 中的 MFA 配合使用

How background app like NT-service can work with MFA in Office 365

我在 Windows 上的 NT 服务使用 EWS API 访问 Office 365 帐户以执行一些定期工作。 它是用 C++ 编写的。 当客户安装我的应用程序时,他选择 user/password 哪个 NT 服务用于发送 EWS 请求。 User/password 以加密视图保存在某个 conf 文件中。 现在 Microsoft 强制对 Office 365 使用 MFA。 问题是,如果后台 NT 服务不与用户交互,它如何通过附加短信代码通过 MFA? 我读到了应用程序密码 https://docs.microsoft.com/en-us/azure/active-directory/user-help/multi-factor-authentication-end-user-app-passwords

它有效,但他们写道“您的管理员可能不允许您使用应用程序密码”。 它还给用户增加了管理此应用程序密码的问题。 是否有任何替代解决方案可以从不与用户交互的应用程序(如 NT 服务)中使用 MFA? 有人可以帮忙吗?

一种更简单的处理方法是使用条件 MFA 或受信任的 IP https://dirteam.com/sander/2020/07/07/todo-move-from-mfa-trusted-ips-to-conditional-access-named-locations/ 来有效地允许您的应用绕过它(假设它在受信任的上下文中应该是 运行)。

TOTP(基于时间的一次性密码)作为次要因素是最可自动化的,例如 https://gsexdev.blogspot.com/2020/07/using-2-authentication-factors-for-mfa.html 但我会推荐第一种方法,因为从长远来看这将更加可靠。

第三个选项是使用客户端凭据流程https://docs.microsoft.com/en-us/azure/active-directory/develop/scenario-daemon-overview,这样您就可以避免使用用户名和密码,这是一个更安全的选项。为此,我可能会从 EWS 转移到 Graph API,因为您也可以进一步缩小 Graph 中的访问范围。

您可以在 Exchange 租户中注册您的应用程序并使用证书进行身份验证 - https://developermessaging.azurewebsites.net/2018/09/11/authenticating-against-exchange-web-services-using-certificate-based-oauth2-tokens/

永远不需要密码提示。