使用 PrincipalContext 从 Azure AD 验证用户凭据

Validate user credentials from Azure AD using PrincipalContext

如何使用 PrincipalContext 验证用户名和密码对 Azure AD 帐户是否有效? 我试过:

try
{
    using (PrincipalContext context = new PrincipalContext(ContextType.Domain, "mycompany.com", username, password))
    {
        if (context.ValidateCredentials(username, password))
        {
            return true;
        }
    }
}
catch (Exception)
{
}
return false;

但是我得到了错误:"The LDAP server is unavailable."

用户名格式为:"AzureAD\Username"

PrincipalContext 的构造函数应该是什么样子才能连接到 Azure 并确认用户名和密码?

Azure AD 和 Windows Server AD 不是一回事。他们都旨在解决相同的问题,但方式不同。您正在尝试用于 Windows Server AD 的 PrincipalContext。

Windows Server AD 可以同步到 Azure AD,但只能同步对象信息 - 如用户、组等,以便信息在 Azure AD 中可用。但是协议级的东西,比如 Kerberos,不能通过 Azure AD 使用。

因此,与其拥有可以使用 Kerberos 与 Windows 服务器 AD 通信的受信任 domain-joined 服务器,Azure AD 依赖于 OAuth 和更现代的网络协议,无需受信任的服务器。 OAuth-protected Web 应用程序或移动应用程序可以在任何托管服务器上运行。

可以使用 ADAL 库完成身份验证。您可以在此处找到 Azure GitHub 示例中的示例:

这些步骤的目的是 - 将应用程序注册添加到 Azure AD - 这将为您提供一个客户端 ID(以及可选的机密,稍后您将需要)在 Azure AD 中唯一标识您的应用程序- 将 ADAL NuGet 包添加到您的应用程序 - 让 ADAL 将用户重定向到 Azure AD 以登录 - 登录后使用令牌并将用户登录到您的应用程序

您可以在此处找到完整示例:https://github.com/Azure-Samples/active-directory-dotnet-webapp-openidconnect