是否可以从 Web 应用程序中获取客户端计算机上用户的活动目录凭据?
澄清一下,我正在设计一个 Web 应用程序,它将托管在客户的 Intranet 上。
要求应用程序的用户在访问应用程序时不会被提示输入凭据,而是应该自动获取登录到客户端计算机的用户的凭据,而无需用户交互。
是否可以从 Web 应用程序中获取客户端计算机上用户的活动目录凭据?
澄清一下,我正在设计一个 Web 应用程序,它将托管在客户的 Intranet 上。
要求应用程序的用户在访问应用程序时不会被提示输入凭据,而是应该自动获取登录到客户端计算机的用户的凭据,而无需用户交互。
绝对地。这对于 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 的空/默认构造函数将导致它尝试自动查找 - 事实上,这是首选方法。
也许 .NET 有一种更直接的方法来做到这一点,但使用 PHP 我只是将我们的 Active Directory 服务器作为 LDAP 服务器访问。
我不确定执行此操作需要对服务器进行哪些调整。我没有设置服务器,我只是查询它。我也不建议您使用 PHP。我只是发现处理 LDAP 比尝试直接绑定到 Active Directory 更容易。
Windows 集成身份验证,用户必须使用 IE,并且站点必须在用户的受信任站点中。如果这些情况属实,那么 IE 会将您的 Windows 安全令牌传递给该网站并对其进行身份验证。我们在 Intranet 上使用 SharePoint 执行此操作,否则访问任何受限制的内容会很痛苦——每次单击文档时都会收到提示。
不,当然不是。你能想象导致随机网络应用程序能够获取你的 AD 用户名和密码的破坏吗?
现在,如果您只想要用户名 - 如果您使用的是集成的windows auth ,则在 REMOTE_USER 中。而且,windows auth 会自动将用户登录到您的站点 - 假设您共享一个域(或信任)。
编辑:IWA 在 Intranet 方案中工作,因为 IE(默认情况下)包括 Intranet 安全区域中的 Intranet 站点。此外,系统管理员可以使用 GPO 设置其他受信任的站点。Firefox 也支持 NTLM,Opera和Chrome也是如此。总而言之,这不是设置 Intranet 的坏方法。
但请注意 - 您没有获得凭据。您与客户协商一个令牌,这就是保持 IWA 安全的原因(与我的上述观点相关)。