Intranet Active Directory Auth 与 VB.NET

Posted

技术标签:

【中文标题】Intranet Active Directory Auth 与 VB.NET【英文标题】:Intranet Active Directory Auth with VB.NET 【发布时间】:2010-06-23 15:40:21 【问题描述】:

我正在开发一个 Intranet Web 应用程序,并且正在学习如何将 VB 连接到 Active Directory。我们将执行一些特定于位置的权限,我的老板希望(如果可能)我连接到 Active Directory 以获取用户的位置。

我认为我需要做的就是获取用户名,但我不确定最好的方法是什么。我们是微软唯一的商店,所以 IE 和 IIS 是一天的秩序。要访问 Intranet,您必须使用我们的域登录到计算机,这是一种安全级别,但随后我需要进行身份验证并确保用户有权进行更改。我想我们要么在 AD 信息中有一个修饰符(如果还没有的话),要么在数据库中保留一个权限表,但前者可能是首选。

我知道 IIS 具有允许/需要身份验证的功能,但我不确定它应该如何工作。

那么,获取用户凭据的最佳/最简单/有点(最?)安全的方法是什么?我总是可以做一个登录页面,但如果我能在后台获取他们的 AD 凭据会更好。

谢谢!

【问题讨论】:

【参考方案1】:

您需要为您的 IIS 站点禁用匿名身份验证并改为启用 windows-auth。

现在转到您的 web.config 并更改以下内容

<authentication mode="Windows"> 
...
</authentication>

见http://msdn.microsoft.com/en-au/library/532aee0e(v=VS.80).aspx

&

必要时

<identity impersonate="true" />

见http://msdn.microsoft.com/en-us/library/aa292118(VS.71).aspx

现在您应该能够使用

获取当前用户
HttpContext.Current.User.Identity.Name

检查用户是否在您可以使用的特定组中

HttpContext.Current.User.IsInRole("YourActiveDirectoryGroup")

【讨论】:

我实际上在这篇文章中偶然发现了相同的信息:tek-tips.com/faqs.cfm?fid=5440 完美!这正是我一直在寻找的。​​span> 【参考方案2】:

IIS 可以配置为使用集成身份验证,这将使您能够访问用户的 samaccountname(Windows 2000 之前的登录)。有了它,您可以对 AD 进行 LDAP 查询并检查组成员身份。如果用户是 CanModifyStuffGroup 的成员(您在 AD 中创建并添加了用户),则让他们进行更改,否则为他们提供只读版本 - 或其他任何内容。

【讨论】:

如何从 VB.net 访问 samacountname?我在谷歌上搜索没有多大成功...... 我从我写的一个旧的 ASP.Net 应用程序中提取了以下 VB.Net 行: samaccount = HttpContext.Current.User.Identity.Name 但是,由于围绕变更过程的公司政策,我们维护了我们的拥有自己的权限数据库,而不是维护 AD 组。

以上是关于Intranet Active Directory Auth 与 VB.NET的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Active Directory 填充 Apache 服务器中的 REMOTE_USER(与 SSO 相关)

powershell 用于将Active Directory组添加到Active Directory的Powershell脚本

Active Directory 和 Active Directory LDS 中的字段

在 Active Directory 中添加来自本地 Active Directory 的来宾用户

确定当前用户是不是正在登录 Active Directory(或者是有效的 Active Directory 用户)

Azure B2C 来宾(外部 Azure Active Directory)X 成员(联合 Azure Active Directory)