webForumDet fria alternativet

AD-lösenord lagra i session

.NET

3 svar · 423 visningar · startad av Addeladde

Medlem sedan jan. 20013 406 inlägg
Frågan#1

Hej

Jag loggar in mot AD med följande kod och skapar sedan en ticket.

 [DllImport("advapi32.dll", CharSet = CharSet.Auto)]

    public static extern int LogonUser(String lpszUserName, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);

    public const int LOGON32_LOGON_INTERACTIVE = 2;
    public const int LOGON32_PROVIDER_DEFAULT = 0;
if ((LogonUser(Username.Text, Domain.Text, Password.Text, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref token) != 0 && userIsActive > 0) || Functions.FixIntZero(Request.ServerVariables["SERVER_PORT"]) > 1000)
        {
            

            string returnUrl = Request.QueryString["ReturnUrl"];
            if (returnUrl == null) returnUrl = "myPages.aspx";

            }
...

Men nu ska jag även bygga en del integrationer mot Exchange och webdav mappar. Då behöver jag lösenordet igen. Det känns inte okej att lagra lösenordet i sessions för då sparas de väl på klienten i form av en cookie. Vill heller inte att användaren ska behöva skriva in lösenordet varje gång den ska ansluta mot en server.

Tror inte ticketen går att använda för att ansluta mot en webdav mapp heller.

MyCredentialCache = new System.Net.CredentialCache();
            MyCredentialCache.Add(new System.Uri(strInboxURI),"BASIC", new System.Net.NetworkCredential(strUserName, strPassword, strDomain));

            Request = (System.Net.HttpWebRequest)HttpWebRequest.Create(strInboxURI);
            Request.Credentials = MyCredentialCache;

Några ideer?

Medlem sedan maj 20012 812 inlägg
#2

addeladde skrev:

Det känns inte okej att lagra lösenordet i sessions för då sparas de väl på klienten i form av en cookie.

Nej det sparas inte på klienten som en cookie, lägger du det i en sessions så sparas sessionsidet som en cookies på klienten (eller i url:en om du kör cookieless).

Nu var det längesedan jag sysslade med det här. Men du borde väl kunna använda ASP.NET egna loginkontroller och sedan impersonate den personen som du loggar in som, då kommer dina sidor att köras som den personen och få alla de rättigheter som den personen har. Vet dock att det kan bli problem när man försöker accessa maskiner i flera led eftersom rättigheterna inte "följer med" över flera maskiner om man inte meckar en hel del...

- M

Medlem sedan juni 20008 205 inlägg
#3

Gladh skrev:

addeladde skrev:

Det känns inte okej att lagra lösenordet i sessions för då sparas de väl på klienten i form av en cookie.

Nej det sparas inte på klienten som en cookie, lägger du det i en sessions så sparas sessionsidet som en cookies på klienten (eller i url:en om du kör cookieless).

Och oavsett detta är det inte helt toppen att spara såpass känslig data som lösenord i sessionen, eftersom den kan hivas runt okrypterad kors och tvärs på nätverket om man inte kör sessionshanteringen inproc.

Medlem sedan jan. 20013 406 inlägg
#4

Kom på att sessions inte heller var något alternativ då det finns en funktion för kom ihåg mig. Vill heller inte lagra lösenordet i en tabell heller.

Applikationen kräver SSL och går enbart att köras via det. Vad tror ni om att lagra lösenordet i userdata i ticketen som krypteras?

Egentligen enda lösningen jag har på det just nu. Inpersonate har jag inte fått att fungera och jag tror inte det fungerar på webdav.

260 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)