web-dev-qa-db-ja.com

サーバー側でのCURL HTTP認証

Zendを使用してWebサービスを構築しています。ユーザーに応答を送信する前に、ユーザーを認証する必要があります。ユーザーは、curlを使用してサーバーページにリクエストを送信し、curl_setopt($curl, CURLOPT_USERPWD, 'key:pass');の形式で資格情報を渡します。

IendはZendフレームワークを使用しているため、サーバーサイドページは次のように表されます。

http://www.example.com/app_name/public/controller/action/parameter

ユーザーのリクエスト(client.php)の合計コードは次のとおりです。

<?php
$curl = curl_init('http://www.example.com/app/public/user/add/1');

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);                         
curl_setopt($curl, CURLOPT_USERPWD, 'username:password');
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY);                    
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);                          
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);                           
curl_setopt($curl, CURLOPT_USERAGENT, 'Sample Code');

$response = curl_exec($curl);                                          
$resultStatus = curl_getinfo($curl);                                   

if($resultStatus['http_code'] == 200) {
    echo $response;
} else {
    echo 'Call Failed '.print_r($resultStatus);                         
}

?>

次に、サーバー側(zendコントローラー内)でユーザー名とパスワードを取得できるようにする必要があります。これにより、データベースからユーザーの資格情報を確認し、それに応じて応答を送信できるようになります。では、どのようにして別のページで認証を行うことができますか?

16
shasi kanth

Zend Frameworkには、HTTP認証を処理するための既製のコンポーネントがあります。

で例を確認してください

これを使いたくない場合でも、「古い」方法を使用できます。

$_SERVER['PHP_AUTH_USER']$_SERVER['PHP_AUTH_PW']を手動で確認します

8
Gordon

CURLOPT_HTTPAUTHCURLAUTH_BASICに設定する必要があります。

これにより、ターゲットスクリプトでPHP_AUTH_USERおよびPHP_AUTH_PW(プレーンテキスト)を使用できるようになります。

呼び出しスクリプト:

<?php
$ch = curl_init('https://localhost/target.php');
// ...
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_exec($ch);
?>

Target.php:

$user = $_SERVER['PHP_AUTH_USER'];
$pass = $_SERVER['PHP_AUTH_PW'];

ユーザー名とパスワードはプレーンテキストで送信されるため、HTTPS経由でcURLリクエストを実行することをお勧めします。

6
Linus Kleen

ユーザー名とパスワードを投稿フィールドとして送信できます

$post_data = $user.":".$pass
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);

$ _POSTを使用して認証情報を取得できます

1
aruna