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コントローラー内)でユーザー名とパスワードを取得できるようにする必要があります。これにより、データベースからユーザーの資格情報を確認し、それに応じて応答を送信できるようになります。では、どのようにして別のページで認証を行うことができますか?
Zend Frameworkには、HTTP認証を処理するための既製のコンポーネントがあります。
で例を確認してください
これを使いたくない場合でも、「古い」方法を使用できます。
$_SERVER['PHP_AUTH_USER']
と$_SERVER['PHP_AUTH_PW']
を手動で確認します
CURLOPT_HTTPAUTH
をCURLAUTH_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リクエストを実行することをお勧めします。
ユーザー名とパスワードを投稿フィールドとして送信できます
$post_data = $user.":".$pass
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$ _POSTを使用して認証情報を取得できます