

PHPで作られたAPIがあり、CGI版のPHP5.4が動作するサーバー上で動かそうとしています。  
無断でAPIを利用されないようにするために何らかの認証を持たせたいのですが、  
DIGEST認証やBASIC認証はモジュール版で無ければ動かないようで、正しいパスワードを入力しても再入力を求められてしまいます。（検証した方法:
『[PHPによるHTTP認証](http://php.net/manual/ja/features.http-auth.php)』）  
そのためタイムベースのワンタイムパスワードなどの別の手段で代替しようと考えていますが、このようなケースでは一般的にどのような認証方法を用いるのが最適なのでしょうか？

条件:

  * 認証に必要な情報はhtpasswdではなくPHPファイルから読み込まれます。
  * APIサーバーもクライアントも自分で管理しているサーバーで、ある程度自由に変更できます。
  * データベースを扱うAPIサーバーから取得した情報を、別のサーバーにある複数のサイト上で表示するのが目的です。
  * サーバーとクライアント間の通信は暗号化されていません。（非SSL）
  * 認証は curl の POST で行う予定です。

具体的な実装方法というよりも方式や流れを知りたいと思っています。よろしくお願いします。

* * *

追記:  
.htaccessに下記を追加する方法も試しましたが、特定のサーバー(さくら)では機能したものの目的のサーバー(heteml)では機能しませんでした。

[code]

    RewriteEngine on
    RewriteCond     %{HTTP:Authorization} ^(.*)
    RewriteRule     ^(.*) - [E=HTTP_AUTHORIZATION:%1]
    
[/code]


CC BY-SA 3.0
2015-12-01T09:06:51.907
19512
2015-12-02T05:13:21.657
2015-12-02T03:11:22.817
10083
10083
question
php
CGI版のPHPでAPIへのアクセス時に認証を行うには？


HTTP認証の情報が載ってるAuthorizationヘッダはCGIでは落とされるので使えません。別の環境変数に載せ替えるテクニックが一般に使われてるようですが、これが出来るかどうかはサーバの設定次第です。

  * 独自拡張ヘッダ(X-ヘッダ)に載せる
  * POSTパラメータに含める

のが確実です。

具体的な認証方法は必要なセキュリティレベル次第です。

  * 平文ID/パスワード
  * 固定トークン
  * OAuthなどの標準プロトコル

なお、BASIC認証はID、パスワードを連結してBase64でエンコードしてるだけなので、実質平文です。


CC BY-SA 3.0
2015-12-02T05:13:21.657
19542
2015-12-02T05:13:21.657
5793
19512
answer