2016-07-01 6 views
1

私の質問は、具体的には、REST実装によるJWTの私のアプローチに関するものです。私のJWT-REST APIへのアプローチ

私はクライアント側でAngularJSを、サーバー側でPHPを使用しています。

はできるだけ早く初めてページが読み込まれると、私は、サーバーへの1つのGETリクエストを発射し、Webサービス(符号化された署名)から署名を取得します。

誰かがWebページを開くと、我々は、フォームにログイン存在し、ユーザーはそれを正しく記入するとき、我々はJWT暗号化された形式でサーバにログイン情報を送信します。

Header(ALGORITHM & TOKEN TYPE).Payload(Login form data).Signature(Received from the first GET web service call) 

さて、ログイン後、我々が得たexpすなわちトークンの期限切れタイムアウト・データをサーバーから取得します。これで、ログインしたユーザーにもう1つのフォームが表示されます。従業員を作成するために使用されます。だから、私の実装は次のとおりです。

  • 我々は(angularjsを使用して)フォームを提示
  • ユーザーはデータ
  • システムを入力フォームの項目は、システムがaddEmployee Webサービスをトリガし、その後正しい場合、フォーム
  • を検証します。しかし、我々が渡すデータはheader authorization bearerのみです。たとえば:だから

Host: mysite.com POST: /services/addEmployee Accept: application/json Content-Type: application/json Authorization: Bearer Header(ALGORITHM & TOKEN TYPE).PAYLOAD(Employee form data + EXP token expire time received in the response of login web service).Signature

、ここでは、リクエストボディには何も渡しません。これはPOST要求ですが。サーバー側では、Bearerをデコードしてペイロードを取得するだけです。

私は実際にプレーンテキスト形式でデータを送信したくありません。たとえば、POSTデータを本体に送信すると、誰が何が渡されているのかを見ることができます。私はあるレベルまで私のWebサービスを暗号化したい。とにかくこのアプローチは正しいか、または有害であるか?

+2

なぜhttpsを使用しないのですか? –

+0

JWTはHTTPS上でのみ動作します。まあ、どんなスタティックなクッキーベースのセッションスキームもHTTPSでしか動作しません。 –

+0

@MK。 JWTはHTTPとHTTPSの両方で動作します。 –

答えて

0

あなたのアプローチは間違っていると思います。 JWTペイロードは、機密情報を保持する意図はありません。誰でもそれを読むことができます。 ペイロードをエンコードすることはできますが、通常はJWTが使用される方法ではありません。

通常JWTペイロードは敏感やリクエスト固有の(例えば、あなたの従業員がデータを形成する)ではない主張を含める必要があります。そのデータをリクエスト本体に保存すると、さまざまなニーズにどのようなHTTP動詞とパラメータを使用していても、さまざまなAPI呼び出しにJWTを再利用できます。あなたが任意のプレーンテキストデータを送信していないので、

全体の要求はSSLでencriptedされます。誰でもあなたのトークンを取得してユーザーを偽装する可能性があるので、HTTPSなしでこれを使用しないでください。

お手数ですが、ご安心ください。

関連する問題