jak se pomoci CURL prihlasit na zabezpecou stranku a zobrazit obsah na externim URL

pp
Člen | 50
+
0
-

Ahoj,
mam v DB udaje pro pristup k nekolika HW zarizenim, prozatim v datagridu zobrazuju jen odkaz na prihlasovaci stranku jejich managementu a musim se prihlasit manualne.

$this->redirectUrl("https://$ip:$port");

Chtel bych se kliknutim dostat primo do zabezpecene sekce (jmeno a heslo mam v DB). Zkousel jsem v bunce typu $grid->addColumnLink navazat na odkaz „action“, ktera resi prihlaseni pomoci CURL

function testCurl($username, $password, $file, $address, $port)
{
  		$ch = curl_init();
        curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt ($ch, CURLOPT_COOKIEJAR, null);
        curl_setopt ($ch, CURLOPT_HTTPHEADER, Array ('Expect: '));
        curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt ($ch, CURLOPT_URL, "https://$address:$port/login.cgi");
        curl_setopt ($ch, CURLOPT_POST, 1);
        curl_setopt ($ch, CURLOPT_POSTFIELDS, Array ('uri' => "/$file", 'username' => $username, 'password' => $password));
        $retfile = curl_exec ($ch);
        curl_close ($ch);
        return $retfile;
}

a pak z vysledeku vygeneru Response

$this->sendResponse(new \Nette\Application\Responses\TextResponse($retfile));

Tohle v podstate funguje, jenze bych potreboval, aby pri tom doslo i k presmerovani na externi URL toho zarizeni „https://$ip:$port“, aby byly funkcni i navazujici odkazy.
Poprosim o radu nebo nasmerovani kudy do toho. Dik

Polki
Člen | 553
+
0
-

Co takhle to dělat pomocí JS?

Po kliku na tlačítko se místo tvého curl postu zavolá vykonání požadavku na tu danou URL tedy ‚https://$address:$port/login.cgi‘
s danými postfields.
Jakože bude se to chovat jako kdyby si se přihlásil přes formulář na té konkrétní stránce.

Akorát je možné, že neprojdeš přes nějaké ‚SameSite‘ cookie, takže to by chtělo taky ještě ošetřit.

pp
Člen | 50
+
0
-

Ok, v podstate je mi jedno jak dosahnou vysledku tj. prihlasit se automaticky pomoci ulozeneho jmena a hesla v DB do managementu externiho prvku – tj. mimo origin. Zkousel jsem v JS a vyhorel stejne.

Pokud to necham v defaultu tak koncim na „blocked by CORS policy“.

Jakmile pro fetch nastavim ‚no-cors‘ neprenasi se mi hlavicky a cookie a dostavam chybu:

Uncaught (in promise) Error: HTTP 0: at new HttpError (Naja.ts:176) at EventTarget.makeRequest (Naja.ts:136)

Poradi nekdo jak na to? At uz pomoci CURL nebo JS.

$(document).on('click', '.col-lastip a', function (e) {
	naja.makeRequest(
                      'POST',
                      "https://$IP:$PORT/login.cgi",
                      { 'username' : 'username', 'password': 'password' },
                      { fetch: {
                              mode: 'no-cors',
                              credentials: 'include',
                              headers: {
                                    'X-test': 'test',
                                    'Set-Cookie': 'SameSite=none'
                              }
                          }
                      }
        );
});
pp
Člen | 50
+
0
-

Tak jeste jsem dohledal, ze Nette v defaultu ma „cookieSamesite: Lax“ tak jsem v konfiguraci nastavil.

http:
    cookieSecure: true
session:
	cookieSamesite: None

navic u zpracovani signalu mam anotaci

/**
 * @crossOrigin
 */

Ale zadna zmena. Uz se v tom placam delsi dobu a preslapuju na miste.
Prosim jak to preprat ?