web-dev-qa-db-ja.com

1つのサーバーでJWTを作成し、別のサーバーで検証する必要がありますか?

それで私が2つのマイクロサービスを持っているとしましょう:

1)。いくつかのハードウェアイベントによってトリガーされるサーバーレス/ラムダ関数

2)。一部のデータを処理するWebSocketサーバー

認証された接続のみがwebsocketサーバーに接続できるようにしたいと思います。しかし、ラムダ関数には、それ自体を認証するための識別データがありません。

私はラムダ関数でJWTを作成し、秘密鍵(および短い有効期限)を使用して、WebSocketサーバーで認証することを検討しています。

Websocketサーバーもこの秘密鍵を知っており、接続を許可する前にトークンを検証できます。

だから私の質問: IDフリーのサーバー間認証でこれを行う必要がありますか?私の秘密を安全に保つことを提供します。

6
Horse

達成したいのは、Lambda関数とWebSocketサーバー間の認証されたマシン間通信です。

それを達成するためのさまざまなメカニズムがあります。 JWTトークンを使用することも1つの可能性ですが、できるだけ単純にしたい場合は、もっと簡単な方法もあります。

あなたの質問に基づいて、事前共有秘密方式に基づく認証が必要です。最も簡単な解決策は basic auth (またはトランスポートプロトコルとしてHTTPSを使用していない場合は同等のもの)を使用することです。使用しているプロトコルが何であれ、それが暗号化されていることを確認してください。そうしないと、秘密が漏洩する可能性があります。

WebSocketサーバーは最初に基本認証の認証情報を評価し、送信者が有効でリクエストがさらに処理されるかどうかを決定します。資格情報は、十分に長いランダム文字列(128ビットなど)と同じくらい単純にすることができます。

JWTを使用して追加の値がない場合(たとえば、トークンの有効期間を制限したり、トークンの本文に追加情報を転送したりする場合)、複雑さは隠れたリスクをもたらし、脆弱性。

1
Demento