像NT服务这样的后台应用程序如何与Office 365中的MFA一起使用

问题描述

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

它可以工作,但是他们会写“您的管理员可能不允许您使用应用程序密码”。 还会给用户增加管理该应用密码的麻烦。 是否有其他解决方案可以使用不与用户交互的应用程序中的MFA(例如NT服务)? 有人可以帮忙吗?

解决方法

一种更简单的处理方法是使用条件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/

不需要密码提示。