Kan man administrera nt-grupper och ev. användare från en asp.net-sida? Nån som har nått bra tips på sida eller kodsnutt? Hej, ja det går.. Det verkar jättebra. :) Har hittat en kodsnutt som verkar vara ganska enkel: asp.net kontot har inte rättigheter att ändra eller läsa i Active Directory Finns flera olika sätt, jag skulle i denna situation skapa en Enterprise Services class (COM+) som jag registrerar och sätter identiteten till en administratör. Detta för att inte ändra den anvädndare som kör asp.net processen.Skapa nt-grupper?
Tack
/PeterSv: Skapa nt-grupper?
Här följer ett litet exempel du kan gå på.
http://www.123aspx.com/redir.aspx?res=29213
Även quickstarten som följer med .Net framework examples har lite info hur du går till väga.
<code>
DirectoryEntry de =
new DirectoryEntry("LDAP://dc=com/dc=microsoft/OU=EMail
Accounts/CN=John O'Donnell");
DirectorySearcher ds=new DirectorySearcher(de);
SearchResultCollection src = ds.FindAll();
foreach(SearchResult sr in src)
{
DirectoryEntry de1 = sr.GetDirectoryEntry();
de1.Properties["description"].Value
="C# Programmer";
de1.CommitChanges();
de1.Close();
}
</code>
//Johan NSv: Skapa nt-grupper?
Det enda jag vill göra är att kolla ifall en grupp finns och ifall den inte finns skapa den. Nån som har lust att göra en sån funktion åt mig? *hoppas hoppas*
Mvh
Peter IlisSv: Skapa nt-grupper?
<code>
Dim strDomain As String = "xxx"
Dim strGroup As String = "Peters Grupp"
Dim oDomain As Object = GetObject("WinNT://" & strDomain)
Dim oGroup As Object = oDomain.Create("group", strGroup)
oGroup.SetInfo()
oDomain = Nothing
oGroup = Nothing
</code>
Den ger dock felet:
----------------------
General access denied error
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.UnauthorizedAccessException: General access denied error
ASP.NET is not authorized to access the requested resource. Consider granting access rights to the resource to the ASP.NET request identity. ASP.NET has a base process identity (typically {MACHINE}\ASPNET on IIS 5 or Network Service on IIS 6) that is used if the application is not impersonating. If the application is impersonating via <identity impersonate="true"/>, the identity will be the anonymous user (typically IUSR_MACHINENAME) or the authenticated request user.
To grant ASP.NET write access to a file, right-click the file in Explorer, choose "Properties" and select the Security tab. Click "Add" to add the appropriate user or group. Highlight the ASP.NET account, and check the boxes for the desired access.
---------------------
Alltås problem med rättigheter..
/peterSv: Skapa nt-grupper?
Du måste ändra process identiteten eller rewuest identiteten när du anropar AD koden.Sv: Skapa nt-grupper?
Men här kommer andra alternativ.
I IIS kan du ändra den användare som kör själva asp.net processen, default är IUSER_machinename, i ASP.Net är ASPNET användaren standard. Varken ASPNET eller IUSER användaren har administrationsrättigheter och det tycker jag du ska undvika att tilldela dom. Du kan i alla fall i IIS ändra denna användare till en som har mer administrationsrättigheter, ändrar du denna så innebär det att alla asp.net sidor etc kör som den användaren i systemet. Detta alternativ skulle jag undvika p.g.a säkerheten. Du kan även sätta i web.config vem som ska vara den användare som kör asp.net processen.
<code>
<identity impersonate="true"
username="username" password="password">
</code>
Du kan även ändra så du kör med Windows Authentication. Det innebär att asp.net sidorna kommer att köra som den användare som är inloggad på klienten och hör till samma domän som webb servern. Windows Authentication är ett bra alternativ då du skapar administrationssidor där enbart administratören ska komma åt sidan och köra vissa saker som tex skapa grupper eller användare i ett domän. Att öka säkerhetn här är att föredra och då använda dig av SSL (Certifikat).
Ett annat sätt är att du i din kod kan ändra vilken användare som ska köra viss kod, problemet här är att du måste veta användarnamn och lösenord. Äger du domänet så är det inga problem, tänk bara på att inte spara lösenordet i klartext, spara då undan lösenordet tex i registret eller i någon fil som är skyddad och krypterad.
Du måste då använda dig av advapi32.dll
<code>
[DLLImport("C:\\Windows\\System32\\advapi32.dll")]
public static extern bool LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, out int phToken)
</code>
Här är ett exempel på hur du skulle kunna köra med impersonation i din kod:
<code>
int returnedToken;
if( !LogonUser(user, machine, password, 3,0, out returnedToken))
return;
IntPtr token = new IntPtr(returnedToken);
WindowsImpersonationContext context = WindowsIdentity.Impersonate(tokenPtr);
if( context != null )
{
//Skapa din grupp
}
//Återgå till ASPNET kontot
context.Undo();
</code>
Hoppas detta gav dig något..
/Fredrik N