web-dev-qa-db-ja.com

マイクロサービスアーキテクチャの各サービスのアクセストークンの確認

マイクロサービスアーキテクチャを使用して実装されているアプリケーションに取り組んでいます。 jwt標準を使用する認証サービス(A)があり、アプリケーションにはS1、S2、S3などの他のサービスがあります。たとえば、S1はリクエストを受信すると、トークンを検証して、ユーザーが承認されているかどうかを確認する必要があります。検証は次の方法で実現できます。

  • トークンをS1からAに送信し、次にAがトークンを検証して結果をS1に送信します(これは一種のオーバーヘッドです)。
  • S1内のトークンの検証(これは、すべてのサービス内での重複したアクションであり、署名/検証のために、各サービス内の秘密鍵または公開/秘密鍵も必要です)

私はこれらのアプローチが正確にどのように機能するかについて尋ねているのではありません。質問は、どちらが良いですか?または、この状況でのベストプラクティスは何ですか?

2
Hamid Mohayeji

署名をチェックして、サービス内のトークンを検証します。

クレーム付きのjwtを送信することの要点は、認証サービスに再度アクセスする必要がないようにすることです。

そうすることは、アーキテクチャにボトルネックをもたらし、マイクロサービスを使用する理由のいくつかを無効にします

3
Ewan

両方してください。しかし違う。認証サービスでJWTを1回検証します。非対称キー操作は低速です。一度やってください。次に、認証サービスで、マイクロサービスだけが知っている内部秘密鍵を使用して、AESでトークンを暗号化またはHMACします。マイクロサービスは共有AESキーを使用して、認証サービスゲートウェイからトークンの正当性を本物であると迅速に導出できます。

必要なパフォーマンスと必要なセキュリティを、余計なことなく得ることができます。

より洗練された実装で同様の最終結果が必要な場合は、認証サービスとマイクロサービスの間で内部的にTLSクライアント証明書を自由に使用してください。

0
RibaldEddie