A következő címkéjű bejegyzések mutatása: https. Összes bejegyzés megjelenítése
A következő címkéjű bejegyzések mutatása: https. Összes bejegyzés megjelenítése

2015. szeptember 15., kedd

HTTPS-re átirányítás, Form authentication és duplázódott URL paraméterek

Rendszeresen előfordult, hogy a felparaméterezett linkre bejelentkezést követően hibát dobott az ASP.NET codebehind, mondván, hogy nem megfelelő egy vagy több paraméter formátuma. A belépést követően megnézve a linket jogos volt a hibaüzenet, mivel duplázódott mindegyik paraméter, emiatt a QueryString vesszővel összefűzve adta vissza őket.

Ezt a duplázódást a Form authentication csinálta. Védett tartalom elérésekor átirányít a beléptető oldalra, és közben elteszi egy ReturnUrl paraméterbe az eredeti link URL kódolt változatát. Azért, hogy a beléptető oldalon is elérhetők legyenek a paraméterek anélkül, hogy az egész linket fel kéne dolgozni, melléteszi külön a paramétereket is, Ennek hatására a paraméterek kétszer fognak szerepelni: URL kódolva és anélkül.  

A probléma ott folytatódott, hogy nem volt a ReturnUrl tartalma URL kódolva. Kiderült, hogy a HTTP kérések HTTPS-re való átirányítása hibásan történt az ősosztály Page.OnLoadjában.

Az alábbi kód bár kézen fekvőnek tűnik, nem az elvártnak megfelelően működik, az URI.ToString() dekódolva adja vissza az URL-t:
Response.Redirect(Request.Url.ToString().Insert(4,"s"))

Egy lehetséges megoldás a helyes átirányításra:
Request.Url.Scheme + "s://" + Request.Url.Authority + Request.RawUrl;

A HTTPS-re való átirányítás után így már megmaradt a helyesen kódolt URL, azaz a ReturnUrl-ben benne volt a teljes eredeti hivatkozás és a Form authentication által hozzáfűzött paraméterlista is elérhető volt. Ennek ellenére a sikeres belépést követően mégis benne maradt az URL-ben a duplázott paraméterlista.

A user validálás után volt a másik hiba: az URL egyszerűen szét volt bontva a ReturnUrl mentén. Nem csak a ReturnUrl tartalmát adta vissza, hanem mindent, ami utána volt, így a duplázott paraméterlistát is.


--
A Form authenticationről bővebben:
http://blogs.msdn.com/b/vijaysk/archive/2008/01/24/anatomy-of-forms-authentication-return-url.aspx

2010. november 15., hétfő

WCF service Https-en keresztül

Elsőre nem tűnik túl bonyolultnak, van egy wcf service, hostoljuk, méghozzá https-en.
Amikor az ember nekiszalad, akkor látja hogy azért van ezzel szopó, mert ugyan a neten soksok cikk van, de viszonylag kevés olyan, amiben minden választ megkapunk a hogyan-okról.
Ez egy egész jó leírás, ha végigolvassuk, mielőtt nekiugrunk, sokat segít.

Ami nem triviális, az a cert generálás a makecert paranccsal, és a "namespace reservation" a netsh-val (win2008). Sok helyen el lehet tolni, de 2 nagyon fontos dolog van:
  1. A legfontosabb talán az, hogy a namespace reservation-nél a gép HELYI ip címét kell megadni, még véletlenül sem azt, ami kívülről esetleg látszik weben keresztül. 127.0.0.1 és localhost pedig gyorsan elfelejtendők!
  2. Amikor a cert-et generáljuk, a CN=valami property-nél mindenképpen azt a domain nevet kell megadni, amin keresztül majd el lehet érni a szolgáltatást (kívülről). Ezt érdmes bevésni az agyba, mert ha simán egy web oldalt szeretnénk https-en publikálni, ott ugyanígy kell a cert-et generálni (tehát ha https://mydomain.com/valamilyenoldal lesz az url, akkor CN=mydomain.com -nak kell lenine).

Sokszor elkövetett konfigurációs hibákra meg talán ez az oldal elég összeszedett (asztal csapkodások közepette érdemes megnézni)