2017-05-23 21 views
0

私はangle2 &ルーメン5.4を使用してSPAを作成しています。ちょうど2つのルートがあると言うことができます。表示するJSONデータを返す1つのGETルートと、ファイルをデータベースにアップロードする1つのPOSTルート。ログインしなくて済む社内のアプリです(これは私の手元にありません)。ユーザー認証なしでAPIエンドポイントを保護する方法

どのようにしてエンドポイントを適切に保護できますか? POSTアップロードフォームの場合は、非表示のトークンを含めることができますが、それはまったく安全ではありません。ルーメンの認証チュートリアルには、ユーザーのログインが含まれていますが、これは私の選択肢ではありません。

任意の例やチュートリアルでは、本当に私は常に過去

+1

資格情報を一切持たないセキュリティ?つまり、トークンベースの認証がありますが、そのトークンは何かに基づいている必要があります。 –

+0

はい、資格情報なし。私は他の誰かのためにアプリを作っているので、私はそれについて何もしない。これは彼らがそれを望む方法です。 – ghan

+1

資格情報を一切持たないと、実装が難しくなります。おそらく、あなたは内部IPアドレス(ミドルウェア)にアプリを制限することができますが、それは防弾ではない、どちらも良い解決策ではありません.. – Tim

答えて

1

でユーザ認証を使用しているので、あなたはIPアドレスまたはそのような何かに基づいてセキュリティを使用することができます役立ちますが、私はあなたの質問のようなものを参照してください初めてであるだろう、あなたのアプリケーションの任意の時点で、あなたがセキュリティを必要とする場合は、もちろん、あなたは、電話番号や電子メールを入力し、あなたに紹介するトークンを送信するような認証の他の種類を作ることができますそれ以外の場合は、そのような状況で何をすべきかわからない。

0

あなたはシンプルmiddlewareMySQL、例えばを使用することができます。:

<?php 
namespace App\Http\Middleware; 

use App\ApiKey; 
use Closure; 

class ApiMiddleware 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     $tokenValid = ApiKey::where('api_key', $request->header('Authorization'))->exists(); 

     if (!$tokenValid) { 
      return response()->json('Unauthorized', 401); 
     } 

     return $next($request); 
    } 
} 

API_KEYだけstr_random(64);を使用してデータベースに保存し、いくつかのランダムな文字列である可能性があります。次に、毎回のリクエストでこのトークンをAuthorizationヘッダーとして添付する必要があります。シンプルで安全。

少なくとも最後ではなく、それ以降はregisterを忘れないでください。

+0

これは私がやろうとしていたよりも確実に安全です。私は今仕事を中止していますが、明日まではそれを実装することはできませんが、簡単な質問です。 'API_KEY'を暗号化/ハッシュする方が安全でしょうか?フロントエンド(私が知っている公開)とバックエンドの 'API_KEY'に隠されたフィールドがあり、両方をアンハッシュ/解読して結合する必要がある場合は、より安全ですか? – ghan

+0

もちろん、Laravelが提供する 'encrypt()'と 'decrypt()'ヘルパーを使うことができます。それはサーバー上のデータの重要度に依存します。 – wujt

関連する問題