2

是否可以从 Web 应用程序中获取客户端计算机上用户的活动目录凭据?

澄清一下,我正在设计一个 Web 应用程序,它将托管在客户的 Intranet 上。

要求应用程序的用户在访问应用程序时不会被提示输入凭据,而是应该自动获取登录到客户端计算机的用户的凭据,而无需用户交互。

4

4 回答 4

5

绝对地。这对于 Intranet 应用程序特别有用。

由于您没有指定您的环境,我假设它是 .NET,但这当然不是唯一可能的方法。

可以使用LDAP轻松查询 Active Directory 。如果您使用的是 .NET,则可以执行此代码示例或我下面的示例中的操作。您也可以在SQL 环境中执行此操作。

如果您只需要 Windows 来处理身份验证,您可以设置,例如,为Windows Authentication设置一个 .NET Web 应用程序。请务必在 IIS 中为您的应用程序关闭匿名登录。完成后,您将能够访问用户的 Windows 登录名并使用它进行进一步的安全检查(例如,他们在 AD 中的组/角色成员身份)。

您还可以使用 Enterprise Library 的Security Application Block之类的东西来简化整个混乱。


这是一个简短的 C# 示例:(在此处转换为 VB.NET )

using System.DirectoryServices;

/// <summary>
/// Gets the email address, if defined, of a user from Active Directory.
/// </summary>
/// <param name="userid">The userid of the user in question.  Make
/// sure the domain has been stripped first!</param>
/// <returns>A string containing the user's email address, or null
/// if one was not defined or found.</returns>
public static string GetEmail(string userid)
{
    DirectorySearcher searcher;
    SearchResult result;
    string email;

    // Check first if there is a slash in the userid
    // If there is, domain has not been stripped
    if (!userid.Contains("\\"))
    {
        searcher = new DirectorySearcher();
        searcher.Filter = String.Format("(SAMAccountName={0})", userid);
        searcher.PropertiesToLoad.Add("mail");
        result = searcher.FindOne();
        if (result != null)
        {
            email = result.Properties["mail"][0].ToString();
        }
    }

    return email;
}

您不必指定域控制器。执行 DirectorySearcher 的空/默认构造函数将导致它尝试自动查找 - 事实上,这是首选方法

于 2008-10-10T17:42:39.180 回答
1

也许 .NET 有一种更直接的方法来做到这一点,但使用 PHP 我只是将我们的 Active Directory 服务器作为 LDAP 服务器访问。

我不确定执行此操作需要对服务器进行哪些调整。我没有设置服务器,我只是查询它。我也不建议您使用 PHP。我只是发现处理 LDAP 比尝试直接绑定到 Active Directory 更容易。

于 2008-10-10T17:38:46.210 回答
1

Windows 集成身份验证,用户必须使用 IE,并且站点必须在用户的受信任站点中。如果这些情况属实,那么 IE 会将您的 Windows 安全令牌传递给该网站并对其进行身份验证。我们在 Intranet 上使用 SharePoint 执行此操作,否则访问任何受限制的内容会很痛苦——每次单击文档时都会收到提示。

于 2008-10-10T22:43:06.563 回答
0

不,当然不是。你能想象导致随机网络应用程序能够获取你的 AD 用户名和密码的破坏吗?

现在,如果您只想要用户名 - 如果您使用的是集成的windows auth ,则在 REMOTE_USER 中。而且,windows auth 会自动将用户登录到您的站点 - 假设您共享一个域(或信任)。

编辑:IWA 在 Intranet 方案中工作,因为 IE(默认情况下)包括 Intranet 安全区域中的 Intranet 站点。此外,系统管理员可以使用 GPO 设置其他受信任的站点。Firefox 也支持 NTLMOperaChrome也是如此。总而言之,这不是设置 Intranet 的坏方法。

但请注意 - 您没有获得凭据。您与客户协商一个令牌,这就是保持 IWA 安全的原因(与我的上述观点相关)。

于 2008-10-10T17:44:08.540 回答