2016-04-24 18 views
0

私はかなりスリムなフレームワークで新しく、JSONベースのAPIを構築しようとしています。私が望むすべては、これだけのユーザー名とパスワードを持っているAPI関数を呼び出します。これらのアプリはユーザー名とパスワードを使用してスリムレストAPIを

これは私だけの単純なGETを構築

require __DIR__ . '/vendor/autoload.php'; 


$app = new Slim\App(); 
//slim application routes 
$app->get('/', function ($request, $response, $args) { 
$response->withJson("Welcome Message", 201); 
return $response; 
}); 

$app->get('/orders/status/{status}', function ($request, $response, $args) { 

    return get_Orders($request, $response, $args); 

}); 



$app->run(); 


function get_Orders($request, $response, $args){ 

    if($args['status'] == "processing"){ 
     $response->withJson("list of processing orders}", 200); 
     return $response; 
    } 
    else{ 
     $response->withJson("Premission not guranted", 200); 
     return $response; 
    } 

} 

私の残りのAPIのコードは、私は私のAPIを保護することができますどのように依頼します私はそれを保護することができますので、アプリが有効なユーザー名とパスワードを持っていれば、結果だけを返します。

答えて

1

HTTP基本認証は推奨しません。

なぜ?

  1. HTTP基本認証は、あなたが作る各APIリクエストラインを介してクライアントの資格情報を送信し、それを暗号化することができながら、まだ、資格情報がオープンに出ています。それは中間者の攻撃に敏感です。 SSL/TLS接続であっても、脆弱である可能性があります。
  2. ユーザー名とパスワードを指定するだけで、安全なリソースへのアクセスを効率的に制限することはできません。基本認証アクセスには有効期限がないため、リソースに無制限にアクセスできます。
  3. 基本認証で攻撃防御はありません。ユーザー資格情報が侵害されると、これまでのところ悪用が行われる可能性があるため、攻撃がいつどこで開始されたかを特定することは困難です。
  4. ユーザーが基本認証アクセスを取り消す方法はありません。 この詳細についてはhereをご覧ください。

代わりに。 OAuth 2.0のようなトークンベースの認証戦略を使用します。より強固で安全です。各要求でユーザー資格情報ではなくトークンを使用します。トークンは時間制約があり、中間者やCSRF攻撃に耐性があります。

OAuth 2.0についてもっと学習してみてください。そこには多くのドキュメントがあります。 PHP JSON APIには既存のOAuth libraryを使用できます。

2

これを行う1つの方法は、HTTP Basic Authenticationを使用しています。そのためにはBasic Authentication middlewareを使用できます。まず、作曲家を使用してミドルウェアをインストールします。

composer require tuupola/slim-basic-auth 

ミドルウェアをインストールした後、Slimアプリケーションに追加します。

$app = new \Slim\App; 

$app->add(new \Slim\Middleware\HttpBasicAuthentication([ 
    "users" => [ 
     "root" => "t00r", 
     "user" => "passw0rd" 
    ] 
])); 

ここで、すべての経路はパスワードで保護されており、要求にユーザー名とパスワードを含める必要があります。

$ curl --user root:t00r https://localhost/api/something 
+0

apiの呼び出しの例を引用してください。どのようにアプリが上にリストされたAPIの関数を呼び出すか –

+0

'curl --user root:t00r http:// localhost/api/something' –