マイクロサービスアーキテクチャでの認証に関する質問があります。私は今、モノリシックなアプリケーションを持っています。私の目標は、小さなマイクロサービスでアプリケーションを分割することです。JWTとOpenID Connectを使用したマイクロサービスでのクライアント認証
私の最も大きな問題は、今のところ認証です。ドキュメントをたくさん読んだら、最善の解決策は、OpenID Connectを使用して、ユーザがマイクロサービスにリクエストを渡すことができるJWTを取得することを認証することです。
また、複数のエンドポイントが存在しないようにするには、エンドユーザーに対して1つのエンドポイントのみを持つAPIゲートウェイを展開します。さて、私はこのアーキテクチャに2つの質問があります。
認証のための標準的な流れは次のようになります。
ユーザーは、暗黙的な流れではOpenID Connectで私のアイデンティティサーバーに連絡し、id_token(JWT)ともaccess_tokenはを取得します。ユーザーはこのaccess_tokenでAPIにアクセスできるようになりました。 APIゲートウェイは、ID情報サーバでaccess_tokenを更新し、JWTを取得して、それをサブリクエストに追加してマイクロサービスAPIに追加します。
1/API Gatewayがaccess_tokenからJWTを取得する方法は?ドキュメント(http://openid.net/specs/openid-connect-core-1_0.html)の赤い部分から、 "/ userinfo"エンドポイントに連絡できますが、JWTではなくJSON形式になります。
2 /私のマイクロサービス間の認証された呼び出しを許可します。したがって、各マイクロサービスは、他のマイクロサービスと直接接触するためにJWTを生成することができる必要があります。私の最初の考えはアイデンティティ・サーバーに連絡することでした。しかし、OAuth2 Client Credentialsフローでは、id_tokenまたはJWTを取得しません。 JWTのない古典的なOAuth2アクセストークン。第2の考えは、マイクロサービスが、IDサーバによって使用されるものと同じPKIによって発行された証明書を用いて、自身のJWTに直接署名することができるということでした。つまり、JWTは複数の証明書で署名できますが、同じプライベートPKIから署名できます。マイクロサービスがJWTを受け取るとき、それはJWTに署名するために使用された魔法証明書を識別することができる必要があります。私はこの問題に関してRFC上何も見つけられません。トークンに自分のプライベートクレームを追加して証明書を取得することもできますが、この種のソリューションを見ずに数日間Webをブラウズした後、私が間違った経路にいないかどうか疑問に思っています。 JWTで「サービスからサービスへ」の認証と「サービスからサービスへ」認証することができますか?
ありがとうございました!