マイクロサービスアーキテクチャを使用して実装されているアプリケーションに取り組んでいます。 jwt標準を使用する認証サービス(A)があり、アプリケーションにはS1、S2、S3などの他のサービスがあります。たとえば、S1はリクエストを受信すると、トークンを検証して、ユーザーが承認されているかどうかを確認する必要があります。検証は次の方法で実現できます。
私はこれらのアプローチが正確にどのように機能するかについて尋ねているのではありません。質問は、どちらが良いですか?または、この状況でのベストプラクティスは何ですか?
署名をチェックして、サービス内のトークンを検証します。
クレーム付きのjwtを送信することの要点は、認証サービスに再度アクセスする必要がないようにすることです。
そうすることは、アーキテクチャにボトルネックをもたらし、マイクロサービスを使用する理由のいくつかを無効にします
両方してください。しかし違う。認証サービスでJWTを1回検証します。非対称キー操作は低速です。一度やってください。次に、認証サービスで、マイクロサービスだけが知っている内部秘密鍵を使用して、AESでトークンを暗号化またはHMACします。マイクロサービスは共有AESキーを使用して、認証サービスゲートウェイからトークンの正当性を本物であると迅速に導出できます。
必要なパフォーマンスと必要なセキュリティを、余計なことなく得ることができます。
より洗練された実装で同様の最終結果が必要な場合は、認証サービスとマイクロサービスの間で内部的にTLSクライアント証明書を自由に使用してください。