2017-06-15 16 views
0

Webトークンのセキュリティに慣れていないので、これまでに運が必要ないシナリオを実装しようとしています。私は多くのチュートリアルとコード例とプロジェクトを見てきましたが、あまりに進んでいるだけで、コードの塊であるだけで、このコードは生産目的ではなく目的を学習するためのものです。Java EeでJWTでRESTサービスをセキュリティで保護する

私の要件は次のとおりです。

私は、複数の外ディーラーのWebアプリケーションによって呼び出される必要がある3つのサービスがあります。
私たちのアプリにディーラーのアプリからの呼び出しを確保する必要があります。私たちは通信にSSLを使用します。

私はJava eeでJBOSS EAP7を使用しています.JWTの実装(jjwtなど)を使用する予定です。

私がオンラインで見つけた典型的なシナリオは、クライアントアプリケーションがまずアプリケーションIDと秘密(文字列)パスコードを渡してJWTトークンを取得する認証サービスを呼び出していることです。この後、アプリケーションは3つのサービスを呼び出すたびにこのトークンを渡し、各リクエストを尊重する前に検証する必要があります。

私の質問は、以下の通りである:

  1. アプリは、トークンを取得するために呼び出すことが私たちが提供する公開鍵で暗号化し、この要求を渡す必要がないか、私たちはSSLを使用しているので、必要がない場合には? 秘密鍵/公開鍵を使用する必要がある場合は、Javaを使用して鍵を生成する方法と、要求を暗号化/復号化する方法を示す簡単な良い例はありますか?
  2. トークン生成。トークン自体を送信する前に暗号化する必要があるかどうかはわかりません。いくつかのサイトではBase64暗号化を使用しています。また、秘密鍵で署名を暗号化する方法もあります。私はJWSとJWEのコンセプトについて混乱しています。トークンを安全に生成する方法を教えてくれる良い例やチュートリアルはありますか?

  3. このようなシナリオでは、JWTトークンの一般的な有効期限は何ですか?サービスコールを行うたびに新しいトークンを呼び出して取得する必要がありますか?トークンに有効期限がある場合、クライアントアプリケーションは、再度呼び出す前に期限切れかどうかを確認する必要がありますか、サービスがエラーを返すまで待ち​​ますか?

  4. リクエストでトークンを渡す方法と、サーバー上でトークンを検証する方法を示す簡単な例がありますか?

  5. クライアントアプリケーションは、トークンを再利用できる場合はクッキーまたはセッションに保存する必要がありますか?

あなたはリクエストが実際に信頼できるアプリから来ないことを検証するために、アプリの公開鍵を使用することができますので、PKIを使用して

答えて

0
  1. は、望ましいありがとう。
  2. Base64エンコーディングは、これはあなたのユースケースのシナリオに依存します(暗号化されていない)JWT
  3. と引き換えに渡す資格証明書(clientid:secret)のために使用され、常にトレードオフのセキュリティと利便性の間にあります。通常、数分から数時間(またはそれ以上)の範囲ですが、少なくとも(数多くの要求に起因するボトルネックを避けるために)少なくとも2つの呼び出しが必要です。理想的には、クライアントはまた、(前に提示したのと同じ理由で)期限切れをチェックする。
  4. Googleはあなたの友人であり、librariesも専用です。
  5. クライアントは、トークンを再利用できるようにどこかに保存する必要があります。
関連する問題