41 messaggi dal 26 febbraio 2001
L'autenticazione alla mia applicazione web avviene tramite IIS di tipo Basic
su windows server 2000.
Gli utenti sono definiti nel'Active Directory del server.
Nella mia applicazione ho inserito la possibilità di gestire gli utenti (inserimento, cancellazione, modifica, setPassword) ,
per fare questo utilizzo la classe ADHelper che ho trovato
su http://www.c-sharpcorner.com/UploadFile/craig_aroa/ADHelper08232005064459AM/ADHelper.aspx

Vorrei poter creare degli utenti che non sono amministratori ma che possano a loro volta creare altri utenti.
Inoltre tutti gli utenti dovrebbero poter modificare la propria password.

Tutto funziona bene se l'utente connesso è un utente con diritti di amministratore,
invece se l'utente connesso è solo un Domain User e provo ad inserire un nuovo utente
ho questa Eccezione

System.Reflection.TargetInvocationException:Exception has been thrown by the target of an invocation --->System.UnauthorizedAccessException:Acces is denied.

questo avviene nel momento di settare la password attraverso user.Invoke("SetPassword",new Object[]{Password})
dove user è il DirectoryEntry riferito all'utente

La cosa strana è che l'utente viene comunque creato nell'AD ma non è attivo, anche perchè
l'istruzione per attivarlo verrebbe fatta dopo il set password e se la faccio prima viene
generata un'altra eccezione.


L' eccezione di Acces denied avviene anche quando, collegatomi come utente non amministratore provo a modificare la mia password.

Posso capire che un utente non amministratore non riesca ad inserire o modificare i dati degli altri utenti,
ma non capisco perchè non possa cambiarsi la password.


Ho provato ad aggiungere l'utente al gruppo di Account Operators,
in questo caso riesco ad amministrare gli utenti, il problema però è che non ci riesco tramite codice,
sempre utilizzando i metodi della classe ADHelper mi da errore :-((

Inoltre mi rimane sempre il problema che gli utenti "semplici" Domain user non riescono a modificare la
propria password.

Ho trovato molti esempi nel web, provati parecchi, nessuno funzionante :-(((

Potete aiutarmi ?
Grazie
2.410 messaggi dal 13 febbraio 2003
Contributi
allora di tutti gli scenari descritti ci sarebbe tanto da parlare ma iniziamo ad analizzare caso per caso.
Permettere la gestione degli utenti AD tramite web è parecchio pericoloso ed insicuro pertanto se proprio devi andiamo avanti e quindi analizziamo caso per caso con codice e relativi errori altrimenti usa come sempre il buon ctrl + alt + delete della workstation e cambia così le password
41 messaggi dal 26 febbraio 2001
Allora ti spiego meglio, su IIS la protezione della cartella principale della mia applicazione è "Basic Authentication".
Quindi gli utenti che accedono all'app. vengono autenticati direttamente dal server web.
L'acceso a determinate aree ed altre limitazioni sono definite applicativamente.
Gli autenti amministratori posono definire degli altri utenti "master"
che dovrebbero a loro volta poter inserire degli utenti "normali".
Attualmente se un utente amministratore inserisce un utente (user_1) tramite apposita interfaccia web, non c'e' nessun problema , funziona tutto , anche la modifica della password fatta succesivamente.
Se provo invece ad entrare nell'applicazione autenticandomi come "user_1" , utente appena creato, e provo a inserire un nuovo utente, nel momento di assegnare la password tramite questa funzione


public static void SetUserPassword (string UserName, string NewPassword)
{
DirectoryEntry oUser=GetUser(UserName);
oUser.Invoke("SetPassword",new Object[]{NewPassword});
oUser.CommitChanges();
oUser.Close();
}


ottengo l'eccezione di accesso negato.
NB: la DirectoryEntry dell'utente è ottenuta tramite

new DirectoryEntry(user.Path,ADUser,ADPassword,AuthenticationTypes.Secure);

dove user.Path è circa così

"LDAP://fe.mio.domain/CN=user_1,CN=Users,DC=fe,DC=mio,DC=domain"

e ADUser e ADPassword si riferisce ad un utente con i diritti di amministratore.

Il ctrl-alt-canc che suggerisci non è il modo che mi interessa
41 messaggi dal 26 febbraio 2001
Con questo codice trovato su http://www.dotnet247.com/247reference/msgs/37/189557.aspx
sembra funzionare


using (DirectoryEntry userEntry = new DirectoryEntry(GetUser(user).Path, ADUser,ADPassword,AuthenticationTypes.Secure | AuthenticationTypes.ServerBind))
{
object[] password = new object[] {newPassword};
object ret = userEntry.Invoke("SetPassword", password );
userEntry.Properties["userAccountControl"].Value = 0x200;
userEntry.CommitChanges();
}

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.