2012-02-02 10 views
3

getパラメータで呼び出す必要がある動的なPHPページがあります。私は生成されたhtmlを文字列に入れて、後で使用したいと思います。php:カールするforward ntlmの資格情報

これはPHP - Read dynamically generated (and echoed) HTML into a string?と似ていますので、私はcURLを使用して答えを試してみました。

問題は、認証がntlm(apache mod_auth_sspi)で行われることです。カールを実行しているPHPスクリプトはすでに認証されています。たとえば、有効なユーザーだけがこれを実行できます。これらの「資格情報」をcURLに渡すことはどういうわけか可能ですか? (ユーザー名は使用できますが、もちろんパスワードではありません)

まったく別のアプローチでも問題ありませんが、HTMLコンテンツを含む文字列を作成する機能を作っていました。

$response = new Response($request); 
$format = $request->mostAcceptable(array(
    'json', 'html', 'txt' 
     )); 

switch ($format) { 

    case 'html': 
     $response->addHeader('Content-type', 'text/html'); 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_URL, 'http://localhost/viewRecord.php?identifier=' . $identifier); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM); 
     $html = curl_exec($ch); 
     curl_close($ch); 
     $response->body = $html; 
     break; 
    //... 
} 

答えて

1

答えは簡単です:

これは不可能です。

回避策は、NTLM認証を必要としないディレクトリにすべてのファイル(php、JavaScript、およびCSSを含む)を入れることです。

これを達成するには、Apache Configurationにアクセスする必要があります。それが可能でない場合は、Apache Configurationで.htaccessのSSPIを無効にすることができます。任意の認証を許可します(= noneも可能ですが、すべての要求は同じサーバー上のcURLに由来するため、127.0.0.0へのアクセスを制限します)。

承認のために、セッションクッキーをcURLに渡した後、セッションデータをcURLから呼び出されたページの認証に使用することができます。

EDIT:

私は基本的にNTLMの使用をさらに減らしました。 1つのログインページ(認証)があり、それ以外はすべてphpセッション(認証)によって制御されます。私は、これは以下のカールオプションを追加することによって、仕事を得ることができた

Apache2, PHP: create automatic ntlm login page

3

を参照してください:

curl_setopt($curly[$id], CURLOPT_HTTPAUTH, CURLAUTH_NTLM); 
curl_setopt($curly[$id], CURLOPT_UNRESTRICTED_AUTH, true); 
curl_setopt($curly[$id], CURLOPT_USERPWD, ":"); 

バグはPHPのバージョンに応じて、このためのオープンがあります:https://bugs.php.net/bug.php?id=62195

+0

長い間前。私はuserpwdを明示的に設定しないとうまく動作しないことを覚えておいてください。しかし、私はちょうど何かを間違えました。とにかく、NTLMの管理下にある1ページ(ログインページ)しかありません。 PHPセッションで休憩。上記のリンクを参照してください。個人的には、認証メカニズムを変更するのが簡単なので、とにかくそれが良いと思います。 –

関連する問題