DirectoryEntry.Invoke access is denied

Ask a Question related to ASP.NET Security, Design and Development.

  1. #1

    Default DirectoryEntry.Invoke access is denied

    In an ASP.NET application designed as intranet using Windows Authentication.

    I am trying to query a PDC group to see if a string matches a user that is
    assigned to the group using the function below. On my development box, all is
    ok when I access through debug or using the [url]http://localhost[/url]. When I access
    this on the deployment server 2003 or on my dev box using the
    [url]http://ipaddress[/url] I get an
    access is denied on the line:
    object oRet = de.Invoke("Members") .

    What changes to security do I need to apply? I have an NT group that
    limits all the users that can run this.

    TIA, Jason

    private bool UserIdExistsInNT4Group()
    {
    DirectoryEntry de = new DirectoryEntry();
    de.Path = @"WinNT://wfdcptnt1/CMStest,group";
    object oRet = de.Invoke("Members");
    IEnumerable users = (IEnumerable) oRet;
    foreach(object user in users)
    {
    DirectoryEntry det = new DirectoryEntry(user);
    string tuserid = det.Path;
    tuserid = tuserid.Replace("WinNT://", "");
    tuserid = tuserid.Replace("/", "\\");
    _log.Debug(tuserid);
    if (tuserid.ToUpper() == this.UserId.ToUpper())
    {
    return true;
    }
    }
    return false;
    }
    Jason Guest

  2. Similar Questions and Discussions

    1. Access Denied
      Paul; Take Ownership: http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q308421& -- Jupiter Jones An easier way to read newsgroup...
    2. One With Access Denied, Another With Access, But NotFull
      I'm suddenly having access denied/permission problems through Contribute on every page after the templates and their related pages were updated with...
    3. Web Service + Anon Access, but getting 401 Access Denied Error
      I have a simple webservice that just returns a string. The security for this is set to windows authentication in IIS (XP Professional) and anonymous...
    4. Access denied when creating Access application object
      In an ASP file I am running the following in VBScript in order to extract data from an Access 2002 MDB file which is physically located in the...
    5. access denied on data access pages
      I have created data access pages that worked well when I tried them on two separate computer simutaneously, but when we went into production we got...
  3. #2

    Default Re: DirectoryEntry.Invoke access is denied

    Why not just use Context.User.IsInRole("domain\group name")?

    It is a lot easier than trying to get your delegation scenario working and
    much easier than trying to enumerated the users groups (which is much much
    more complex than the code you show below).

    Joe K.

    "Jason" <Jason@discussions.microsoft.com> wrote in message
    news:8722B18A-802B-4F7F-BA1F-CC841FE7A5C7@microsoft.com...
    > In an ASP.NET application designed as intranet using Windows
    > Authentication.
    >
    > I am trying to query a PDC group to see if a string matches a user that is
    > assigned to the group using the function below. On my development box, all
    > is
    > ok when I access through debug or using the [url]http://localhost[/url]. When I
    > access
    > this on the deployment server 2003 or on my dev box using the
    > [url]http://ipaddress[/url] I get an
    > access is denied on the line:
    > object oRet = de.Invoke("Members") .
    >
    > What changes to security do I need to apply? I have an NT group that
    > limits all the users that can run this.
    >
    > TIA, Jason
    >
    > private bool UserIdExistsInNT4Group()
    > {
    > DirectoryEntry de = new DirectoryEntry();
    > de.Path = @"WinNT://wfdcptnt1/CMStest,group";
    > object oRet = de.Invoke("Members");
    > IEnumerable users = (IEnumerable) oRet;
    > foreach(object user in users)
    > {
    > DirectoryEntry det = new DirectoryEntry(user);
    > string tuserid = det.Path;
    > tuserid = tuserid.Replace("WinNT://", "");
    > tuserid = tuserid.Replace("/", "\\");
    > _log.Debug(tuserid);
    > if (tuserid.ToUpper() == this.UserId.ToUpper())
    > {
    > return true;
    > }
    > }
    > return false;
    > }

    Joe Kaplan \(MVP - ADSI\) Guest

  4. #3

    Default Re: DirectoryEntry.Invoke access is denied

    Well, eventually they are going to ask me to put all the users in a listbox
    instead
    of making them type it in.

    "Joe Kaplan (MVP - ADSI)" wrote:
    > Why not just use Context.User.IsInRole("domain\group name")?
    >
    > It is a lot easier than trying to get your delegation scenario working and
    > much easier than trying to enumerated the users groups (which is much much
    > more complex than the code you show below).
    >
    > Joe K.
    >
    > "Jason" <Jason@discussions.microsoft.com> wrote in message
    > news:8722B18A-802B-4F7F-BA1F-CC841FE7A5C7@microsoft.com...
    > > In an ASP.NET application designed as intranet using Windows
    > > Authentication.
    > >
    > > I am trying to query a PDC group to see if a string matches a user that is
    > > assigned to the group using the function below. On my development box, all
    > > is
    > > ok when I access through debug or using the [url]http://localhost[/url]. When I
    > > access
    > > this on the deployment server 2003 or on my dev box using the
    > > [url]http://ipaddress[/url] I get an
    > > access is denied on the line:
    > > object oRet = de.Invoke("Members") .
    > >
    > > What changes to security do I need to apply? I have an NT group that
    > > limits all the users that can run this.
    > >
    > > TIA, Jason
    > >
    > > private bool UserIdExistsInNT4Group()
    > > {
    > > DirectoryEntry de = new DirectoryEntry();
    > > de.Path = @"WinNT://wfdcptnt1/CMStest,group";
    > > object oRet = de.Invoke("Members");
    > > IEnumerable users = (IEnumerable) oRet;
    > > foreach(object user in users)
    > > {
    > > DirectoryEntry det = new DirectoryEntry(user);
    > > string tuserid = det.Path;
    > > tuserid = tuserid.Replace("WinNT://", "");
    > > tuserid = tuserid.Replace("/", "\\");
    > > _log.Debug(tuserid);
    > > if (tuserid.ToUpper() == this.UserId.ToUpper())
    > > {
    > > return true;
    > > }
    > > }
    > > return false;
    > > }
    >
    >
    >
    Jason Guest

  5. #4

    Default Re: DirectoryEntry.Invoke access is denied

    actually, this wont work.

    Scenario is User A is trying to modify a database record
    which has a field which is a userid. This userid is another
    staff's user id and the business rule says to ensure that
    the user id typed in here is in the group. I wont be able
    to create a staff B as a user running under staff A security
    context.

    "Joe Kaplan (MVP - ADSI)" wrote:
    > Why not just use Context.User.IsInRole("domain\group name")?
    >
    > It is a lot easier than trying to get your delegation scenario working and
    > much easier than trying to enumerated the users groups (which is much much
    > more complex than the code you show below).
    >
    > Joe K.
    >
    > "Jason" <Jason@discussions.microsoft.com> wrote in message
    > news:8722B18A-802B-4F7F-BA1F-CC841FE7A5C7@microsoft.com...
    > > In an ASP.NET application designed as intranet using Windows
    > > Authentication.
    > >
    > > I am trying to query a PDC group to see if a string matches a user that is
    > > assigned to the group using the function below. On my development box, all
    > > is
    > > ok when I access through debug or using the [url]http://localhost[/url]. When I
    > > access
    > > this on the deployment server 2003 or on my dev box using the
    > > [url]http://ipaddress[/url] I get an
    > > access is denied on the line:
    > > object oRet = de.Invoke("Members") .
    > >
    > > What changes to security do I need to apply? I have an NT group that
    > > limits all the users that can run this.
    > >
    > > TIA, Jason
    > >
    > > private bool UserIdExistsInNT4Group()
    > > {
    > > DirectoryEntry de = new DirectoryEntry();
    > > de.Path = @"WinNT://wfdcptnt1/CMStest,group";
    > > object oRet = de.Invoke("Members");
    > > IEnumerable users = (IEnumerable) oRet;
    > > foreach(object user in users)
    > > {
    > > DirectoryEntry det = new DirectoryEntry(user);
    > > string tuserid = det.Path;
    > > tuserid = tuserid.Replace("WinNT://", "");
    > > tuserid = tuserid.Replace("/", "\\");
    > > _log.Debug(tuserid);
    > > if (tuserid.ToUpper() == this.UserId.ToUpper())
    > > {
    > > return true;
    > > }
    > > }
    > > return false;
    > > }
    >
    >
    >
    Jason Guest

  6. #5

    Default Re: DirectoryEntry.Invoke access is denied

    Ok, that makes more sense. I have a couple of questions for you:
    - Are you using Active Directory, an NT4 domain or local machine groups?
    - Is your AD domain 2003 native mode?
    - Is your server Windows 2003?

    My sense is that you should really be using the AzMan APIs to be doing what
    you are trying to do. Trying to calculate group membership using Directory
    Services calls is hard and it is much easier to let Windows do this for you.
    There are quite a few options though:
    - If you have 2003 AD and 2003 server to run on, you can use the "S4U"
    constructor for WindowsIdentity to create a WindowsIdentity for an arbitary
    user. From it, you can create a WindowsPrincipal and call IsInRole on that.
    This is very easy and will be reasonably fast if you do some caching.
    - Another option is to use the AzMan APIs to create an AzMan context for
    the user and perform authorizations against it. I can't comment on
    performance here.
    - If you have AD, you can do a better job looking up groups using LDAP and
    the tokenGroups constructed attribute. TokenGroups calculates fully nested
    group membership and includes the primary group, which you may need. It
    also does not include distribution groups (which Members will).

    If you do have AD, I would suggest staying far away from the WinNT provider
    for ADSI/S.DS, especially in ASP.NET scenarios (partly for the problems you
    are having now; they are easier to overcome with LDAP).

    Joe K.

    "Jason" <Jason@discussions.microsoft.com> wrote in message
    news:942393E1-ACCA-490C-9B77-02FB76CB9F0D@microsoft.com...
    > actually, this wont work.
    >
    > Scenario is User A is trying to modify a database record
    > which has a field which is a userid. This userid is another
    > staff's user id and the business rule says to ensure that
    > the user id typed in here is in the group. I wont be able
    > to create a staff B as a user running under staff A security
    > context.
    >
    > "Joe Kaplan (MVP - ADSI)" wrote:
    >
    >> Why not just use Context.User.IsInRole("domain\group name")?
    >>
    >> It is a lot easier than trying to get your delegation scenario working
    >> and
    >> much easier than trying to enumerated the users groups (which is much
    >> much
    >> more complex than the code you show below).
    >>
    >> Joe K.
    >>
    >> "Jason" <Jason@discussions.microsoft.com> wrote in message
    >> news:8722B18A-802B-4F7F-BA1F-CC841FE7A5C7@microsoft.com...
    >> > In an ASP.NET application designed as intranet using Windows
    >> > Authentication.
    >> >
    >> > I am trying to query a PDC group to see if a string matches a user that
    >> > is
    >> > assigned to the group using the function below. On my development box,
    >> > all
    >> > is
    >> > ok when I access through debug or using the [url]http://localhost[/url]. When I
    >> > access
    >> > this on the deployment server 2003 or on my dev box using the
    >> > [url]http://ipaddress[/url] I get an
    >> > access is denied on the line:
    >> > object oRet = de.Invoke("Members") .
    >> >
    >> > What changes to security do I need to apply? I have an NT group that
    >> > limits all the users that can run this.
    >> >
    >> > TIA, Jason
    >> >
    >> > private bool UserIdExistsInNT4Group()
    >> > {
    >> > DirectoryEntry de = new DirectoryEntry();
    >> > de.Path = @"WinNT://wfdcptnt1/CMStest,group";
    >> > object oRet = de.Invoke("Members");
    >> > IEnumerable users = (IEnumerable) oRet;
    >> > foreach(object user in users)
    >> > {
    >> > DirectoryEntry det = new DirectoryEntry(user);
    >> > string tuserid = det.Path;
    >> > tuserid = tuserid.Replace("WinNT://", "");
    >> > tuserid = tuserid.Replace("/", "\\");
    >> > _log.Debug(tuserid);
    >> > if (tuserid.ToUpper() == this.UserId.ToUpper())
    >> > {
    >> > return true;
    >> > }
    >> > }
    >> > return false;
    >> > }
    >>
    >>
    >>

    Joe Kaplan \(MVP - ADSI\) Guest

  7. #6

    Default Re: DirectoryEntry.Invoke access is denied

    Yeah, having to hit NT4 Domain and we are planning to go to AD but was told
    we were not going to use the Kerberos authentication provider. This app is
    running on a Windows2003 server.

    Is this a code snippet like you are describing? If having Server2003 and
    AD2003.

    WindowsIdentity wi = new WindowsIdentity(this._userId);
    WindowsPrincipal wp = new WindowsPrincipal(wi);
    return wp.IsInRole(@"DOMAIN\Test");

    "Joe Kaplan (MVP - ADSI)" wrote:
     [/ref]
    >
    >
    >[/ref]
    Jason Guest

  8. #7

    Default Re: DirectoryEntry.Invoke access is denied

    Yes, that code snippet works great if you are running on 2K3 server and have
    2K3 native AD. It would not work if there is no Kerberos in the environment
    as it is a Kerberos feature that allows you to create the WindowsIdentity
    from the UPN. However, I find it hard to imagine that you won't be using
    Kerberos once you move to AD as it is the native authentication protocol for
    AD and Win2K+. There is no reason why you would want to avoid it that I'm
    aware of and many reasons why you will want or need it.

    Best of luck,

    Joe K.

    "Jason" <microsoft.com> wrote in message
    news:com... 
    >>
    >>
    >>[/ref][/ref]


    Joe Guest

Posting Permissions

  • You may not post new threads
  • You may post replies
  • You may not post attachments
  • You may not edit your posts

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139