2017-02-16 4 views
2

APIとしてはLaravel、フロントエンドにはAngularJを使用しています。フロントエンドとAPIのトークンのセキュリティ問題

APIから、データはこのようになります。

$data = [ 
    'Token'  => \Auth::guard("api")->user()->api_token, 
]; 

return \Response::json([ 
    'Status' => true, 
    'Message' => 'ok', 
    'Data'  => $data, 
], $Code); 

AndularJsコントローラでは、以下のようにクッキーに保存されています。クッキーから

$cookies.put("Token", response.data.Data.Token); 

し、その後、それは私が考えるこの

$cookies.get("Token"); 

のように取得され、これは誰もがトークンを知って取得する場合、彼らはすべての要求を提出するなどのセキュリティ上の問題があります。

あなたはもっと良い方法を提案できますか?

現在のデバイス情報(アンドロイドやデスクトップなど)を取得し、最終的な暗号化された値(トークン+デバイス情報)をクッキーなどのメディアに保存できますか?それから、apiにリクエストを送信するときに....私たちはそれが盗まれたトークンであるかどうかを確認するために解読することができますか?すべてのデバイスでユニークな使い方はありますか?

+0

私が使用する現在の方法は、PHPでセッションをトークンを保存させることです。もちろん、あなたは角度を使用したいかもしれませんが、あなたのセッションに基づいて、リクエストがajax/xhrの場合、トークンをリクエストに追加するミドルウェアを書くことができます。私はこれも興味深いテーマだと思うので、私自身の質問です:http://stackoverflow.com/questions/42250310/you-can-have-your-api-and-eat-consume-it-in-laravel –

+0

実際に私心配です...あなたがapiからフロントエンドに送るものは、クッキーなどの手段で保存されます。ここで懸念されるのは、トークンがフロントエンドでどのように安全であるかです。 – Pankaj

+0

トークンはブラウザーに到達する必要はありません。セッション(** not ** API)トークンは実際にフロントエンドのどこかに保存されなければなりません(クッキー)。しかし、このCookieはセッション識別子(セッションドライバの** cookieではありませんが、暗号化されていれば暗号化されます)があり、その隣にはドメイン外では読み取ることができません。 –

答えて

0

あなたのAPIとの角度クライアント間の安全な通信を保証するために、ウェブ・トークンと一緒に(TLSまたはHTTPS経由HTTP)TLS/SSLを使用するために、その義務、十分でしょうほとんどの場合、あなたは暗号化することで、余分な層を追加することができますトークンペイロード自体は、JSON Web暗号化(JWE)仕様を使用してCookieに格納します。

これが役に立ちます。

0

考えられる解決策はLaravel Passportだと思います。この方法でフロントエンドでclient_idclient_secretを保存し、それらを使用して認証トークンを交換します。

関連する問題