Windows 服务以用户身份连接到 Azure AD (MFA)

Windows Service connect to Azure AD as User (MFA)

我有一项服务需要在用户上下文中 运行,因为 Microsoft 的某些端点需要用户上下文才能执行。我现在的问题是 01.09.2019 MFA 是强制性的。所以,至少在开始时,该服务需要一个人登录,但这是不可能的,因为它是一个非交互式 Windows 服务。所以我的问题是,是否可以通过代码以用户身份登录?如果是,怎么办?刷新令牌是否会存储在 aad 缓存中?

UserIdentifier user = new UserIdentifier(Cred.UserName,UserIdentifierType.OptionalDisplayableId);



        return Task.Run(() => authContext.AcquireTokenAsync(
            "https://api.partnercenter.microsoft.com",
            Cred.ApplicationId,
            new Uri("http://localhost"),
            new PlatformParameters(PromptBehavior.Auto),
            user)).Result;

您需要有某种应用程序来验证用户并将他们的刷新令牌存储在安全的地方,例如 Azure Key Vault。 然后,您的后台服务可以使用刷新令牌来获取新的访问令牌和新的刷新令牌。 您可以使用访问令牌调用 API 并将新的刷新令牌存储在旧的刷新令牌上。

然后如果刷新令牌不起作用,您将需要重复身份验证过程。 由于某些原因,刷新令牌可能会失效,因此您的应用需要为此做好准备。

it is possible to login as a user by code or not? yes it is possible

在身份验证期间,应用会收到登录信息(id_token)和应用可用于获取访问令牌的工件(例如授权代码)。该令牌可用于访问其他资源 -

sample 展示了如何使用 MSAL 将授权代码兑换成访问令牌,该令牌与任何其他有用的工件(例如关联的 refresh_tokens)一起保存在缓存中,以便它可以稍后在应用程序中使用。