Nu ik vandaag weer verder ging aan mijn projectje kwam ik weer mijn probleem tegen. Ik wil graag het WWW-Authenticatie scherm van de browser vermeiden en daarvoor zelf in de plaats de authenticatie verzorgen.
Nu heb ik hier een manier voor gevonden. Dankzij een vorige topic hier op GoT:
Met dit script wordt de inhoud van de index.html uit de map /members/ weergegeven. Als ik nu echter bijv. een linkje plaats in die pagina, naar een andere pagina in de zelfde map, en je klikt daar op, kijg je weer de popup dat je opnieuw moet identificeren.
Dit is dus niet wat ik graag zou hebben. Ik wil dat je net door die map kunt bladeren als je zou kunnen als je via de WWW-Authentication van de browser hebt gedaan.
Nu heb ik zelf al naar een oplossing zitten te zoeken, en had het volgende document gevonden: http://www.zvon.org/tmRFC/RFC2069/Output/chapter2.html
Hierin staat het volgende beschreven:
Nu vraag ik me af of je deze header met PHP kunt samen stellen. Hoe dit moet staat ook in het document. Ik kom alleen er niet uit hoe je de response-digest (te vinden in: 2.1.2. The Authorization Request Header) moet maken. Het staat wel beschreven hoe het moet, hieronder een quote daarvan:
Is dit mogelijk, en zou iemand mij daar mee kunnen helpen?
Dan nog een kleine vraag:
Weet iemand waarom dit niet werkt in PHP:
Als ik zo'n url namelijk gewoon in de browser invoer werkt het wel, maar als ik de zelfde (werkende) url in een header zet, werkt het niet, en krijg ik een 404 te zien.
Nu heb ik hier een manier voor gevonden. Dankzij een vorige topic hier op GoT:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
| <?php $request = "GET ".$rootmap."/members/ HTTP/1.0\r\n"; $request .= "Host: ".$hostname.":80\r\n"; if(substr(getenv(OS),0,7) == 'Windows'){ $request .= "Authorization: Basic ".base64_encode("winuser:password")."\r\n"; }else{ $request .= "Authorization: Basic ".base64_encode("unixuser:password")."\r\n"; } $request .= "User-Agent: PHP/".phpversion()."\r\n"; $request .= "\r\n"; #log in op de server $socket = fsockopen($hostname, 80, $errno, $errstr, 20); if (!$socket) { die('<h3>error</h3>Could not connect to socket!'); } else { fputs($socket, $request); #stuur de request naar de server #haal de data uit de socket while(!feof($socket)){ $buffer = fgets($socket, 8192); if($content == false){ $strLine = ereg_replace("[\r\n]", "", $buffer); if(strlen($strLine) == 0){ $content = true; } }else{ echo $buffer; } } fclose ($socket); } ?> |
Met dit script wordt de inhoud van de index.html uit de map /members/ weergegeven. Als ik nu echter bijv. een linkje plaats in die pagina, naar een andere pagina in de zelfde map, en je klikt daar op, kijg je weer de popup dat je opnieuw moet identificeren.
Dit is dus niet wat ik graag zou hebben. Ik wil dat je net door die map kunt bladeren als je zou kunnen als je via de WWW-Authentication van de browser hebt gedaan.
Nu heb ik zelf al naar een oplossing zitten te zoeken, en had het volgende document gevonden: http://www.zvon.org/tmRFC/RFC2069/Output/chapter2.html
Hierin staat het volgende beschreven:
Zoals je kunt zien, wordt in de laatste HTTP Header beschreven hoe je kunt authoriseren op de server. Die header wordt namelijk door de browser verstuurd.The following example assumes that an access-protected document is
being requested from the server. The URI of the document is
"http://www.nowhere.org/dir/index.html". Both client and server know
that the username for this document is "Mufasa", and the password is
"CircleOfLife".
The first time the client requests the document, no Authorization
header is sent, so the server responds with:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Digest realm="testrealm@host.com",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
opaque="5ccc069c403ebaf9f0171e9517f40e41"
The client may prompt the user for the username and password, after
which it will respond with a new request, including the following
Authorization header:
Authorization: Digest username="Mufasa",
realm="testrealm@host.com",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
uri="/dir/index.html",
response="e966c932a9242554e42c8ee200cec7f6",
opaque="5ccc069c403ebaf9f0171e9517f40e41"
Nu vraag ik me af of je deze header met PHP kunt samen stellen. Hoe dit moet staat ook in het document. Ik kom alleen er niet uit hoe je de response-digest (te vinden in: 2.1.2. The Authorization Request Header) moet maken. Het staat wel beschreven hoe het moet, hieronder een quote daarvan:
De bedoeling is dus dat PHP de juiste HTTP Header opstelt, zodat deze verstuurd wordt, en je in een nieuwe pagina de inhoud van een document in de beveiligde map ziet. Daarna moet je gewoon verder door die map kunnen bladeren, omdat je dus geauthoriseerd bent.response-digest =
<"> < KD ( H(A1), unquoted nonce-value ":" H(A2) > <">
A1 = unquoted username-value ":" unquoted realm-value
":" password
password = < user's password >
A2 = Method ":" digest-uri-value
Is dit mogelijk, en zou iemand mij daar mee kunnen helpen?
Dan nog een kleine vraag:
Weet iemand waarom dit niet werkt in PHP:
PHP:
1
2
3
| <?php header('location: http://username:password@localhost/dir/file.html'); ?> |
Als ik zo'n url namelijk gewoon in de browser invoer werkt het wel, maar als ik de zelfde (werkende) url in een header zet, werkt het niet, en krijg ik een 404 te zien.