Sea*_*ger 8 dns active-directory
我正在运行一个ASP.NET 4.0应用程序,它使用用户名(即HttpContext.Current.Request.LogonUserIdentity.Name.ToString())来管理对各种组件的访问.
返回的用户名的格式为"ABC\jsmith的",其中"ABC"是域名和"JSMITH"是用户的登录名.
此应用程序的安全模块的一部分访问该用户所属的Active Directory组来(例如,"会计学","应付账款","AdminDepartment").我可以使用DirectoryEntry.Properties(即System.DirectoryServices.PropertyCollection")"sAMAccountName".Value从Active Directory获取用户名.
到目前为止,一切都很好,但我希望能够跨多个域扩展应用程序,这意味着我需要能够在Active Directory中找到域名以及用户的登录名.我可以从PrincipalContext获取"域"值,但它返回"abcdc",而不是"abc".我是否可以假设此属性将始终在每个域的末尾返回"dc"(如在"域控制器"中)(在这种情况下,我可以使用属性的子字符串),或者在其他地方我可以获得用户的目前的域名?
我不清楚的一件事是你在域控制器中给出一个目录条件检索域名的问题.我假设您有一个可以看到多个受信任域的服务器,并且用户可以从其中任何一个登录到您的应用程序,这样您就不知道您需要测试角色成员资格所需的域.
要通过ADGroup成员身份控制对功能的访问,您可以使用
HttpContext.Current.User.IsInRole("appdomain\groupname") 
User.Identity.Name =="userdomain\user".我不熟悉域信任问题,但这假设您可以将受信任域中的用户添加到您控制的域组中,这样您就不必担心组域位置.
如果你不能,或者你在每个不同的域中拥有相同的组名,那么你可以做这样的事情吗?
HttpContext.Current.User.IsInRole(userDomainname + "\groupname")
一些要点:
**更新6/8/2011 2:15 PM**
如果我正确理解AD,则用户的域是AD返回的用户对象的组成部分.扩展你的"Bob Newaccountant"的例子......
因此,鉴于以下2个域之间存在信任:
1. "abcdc.com"
    CN=Users
        CN="Bob NewAccountant"
2. "abc.com"
    CN=Users
        CN="Local User1"
    OU=Applications
        OU=MyApplication
            CN=ReportReaders (Members: abcdc\BNewAccountant, abc\luser1)
您应该根据以下查询获取用户的信息:
//name parameter = domain
//container parameter = distinguished name
using(var ctx = new PrincipalContext(
                     ContextType.Domain,
                     name: "abc.com",
                     container: "OU=MyApplication,OU=Applications,DC=abc,DC=com",
                     "abc\serviceaccountname",
                     "Password1"))
{
    var officeGroup = GroupPrincipal.FindByIdentity(ctx,
                                     IdentityType.SamAccountName,
                                     "ReportReaders");
    foreach(Principal prin in officeGroup.GetMembers(recursive: true))
    {
        Console.WriteLine("DistinguishedName: " + prin.DistinguishedName 
            + " UPN: " + prin.UserPrincipalName);
    }
    //Should result in
    //  DistinguishedName: CN=luser1,CN=Users,DC=abc,DC=com UPN: luser1@abc.com
    //  DistinguishedName: CN=BNewAccountant,CN=Users,DC=abcdc,DC=com UPN: BNewAccountant@abcdc.com
}
因此,您应该能够通过active Directory的distinguishedName或userPrincipalName属性获取用户的域.(注意:我没有方便的双域设置,因此我目前无法测试上述代码.)这是否越来越近了?
| 归档时间: | 
 | 
| 查看次数: | 12443 次 | 
| 最近记录: |