MSAL.Net 连接到与 ADFS 联合的 Azure AD

MSAL.Net connecting to Azure AD federated with ADFS

我们正在 ASP.Net MVC 和 Web API 中构建使用一系列 OAuth 2 功能的应用程序 - AcquireTokenByAuthorizationCode(使用 microsoft.identity.web),AcquireTokenSilently, AcquireTokenOnBehalfOf, AcquireTokenForClient 用于应用程序环境的不同部分。

应用程序使用 MSAL.Net 与 Azure AD 和其中配置的用户进行交互以提供对资源的访问并且工作正常。

我们现在正在考虑建立一个连接回组织的本地维护用户帐户,这样最终用户就不会在 AAD 和本地重复,所以在组织中维护的 ADFS 是一个选项。考虑到 ADFS 实例是 2016 年,让 MSAL.Net 使用 ADFS 的一个选项似乎是让 Azure AD 与 ADFS 联合,如本文所述: https://docs.microsoft.com/bs-latn-ba/azure/active-directory/develop/msal-net-adfs-support

该文章仅讨论 AcquireTokenInteractive,我没有看到关于将 AAD 与 ADFS 联合支持其他 MSAL.Net 操作的解释。我会假设这是真的,我们必须 运行 在我们完成所有配置后通过我们的测试,但与此同时,

有没有人有任何关于 MSAL.Net(甚至 msal.js)的操作范围的经验或文档,并且当 AAD 与 ADFS 联合时 AAD 工作正常?

所以我继续自己尝试,在 Azure 中设置 VM,安装 Active Directory、AD FS 并根据文章 https://docs.microsoft.com/en-us/azure/active-directory/b2b/direct-federation-adfs 配置 Azure AD 和 VM AD FS 之间的联合。

然后验证我们的应用程序使用的不同 OAuth 功能,特别是(根据以下观察,我希望其他 oauth 功能也能按预期工作):

AcquireTokenByAuthorizationCode
AcquireTokenSilently
AcquireTokenOnBehalfOf
AcquireTokenForClient

所有这些功能都按预期工作。用户被重定向到组织登录页面并重定向回应用程序。

沿途的一些观察

  1. 使用通过 ADFS 集成的本地 AD 凭据时,刷新令牌的生命周期为 12 小时,而不是在 AAD 中配置用户时的几天。这显然是为了减轻用户信息更改的风险,例如密码更改。如果浏览器闲置时间>12小时,需要用户重新登录。

  2. 一旦通过身份验证,进一步的 OAuth 操作不涉及本地 AD / ADFS。这些操作是针对 Azure AD 的,任何浏览器重定向到 Azure AD 以进行重新授权。