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

时间:2019-09-16 14:56:44

标签: c# azure adal

我有一个需要在用户上下文中运行的服务,因为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;

2 个答案:

答案 0 :(得分:2)

您需要具有某种可对用户进行身份验证并将其刷新令牌存储在安全位置(如Azure Key Vault)的应用。 然后,您的后台服务可以使用刷新令牌来获取新的访问令牌和新的刷新令牌。 您可以使用访问令牌来调用API,并将新的刷新令牌存储在旧的令牌上。

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

答案 1 :(得分:0)

  

是否可以通过代码以用户身份登录?   是的,有可能

在身份验证期间,应用程序会同时接收登录信息(id_token)和工件(例如授权码),应用程序可使用这些工件来获取访问令牌。该令牌可用于访问其他资源-

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