Handling authentication and authorization
読んだ本
Microservices Patterns: With examples in Java の13.3.3 Handling authentication and authorization
FTGO社のモノリシックサービスをマイクロサービスに置き換えるというシチュエーションを例にしてマイクロサービスの設計を解説
monolithic と micro serviceでの認証・認可
in-memory sessionでthread localな認証・認可を扱うだけでよかったモノリシックサービスに、 マイクロサービスを加えようとするときJWTのようなトークン認証を加える必要がある。
書籍の図とほぼ同じものであるが書き直した
図ではauth serviceとなっているが実際はモノリシックサービスを想定しており、
JSESSIONID
はモノリスからの移行という文脈なので、通常のモノリスサービスで扱うセッション管理のため
以下別マイクロサービスへのアクセス
クライアントは
USERINFO
をcookieに含めrequestAPI Gatewayは
USERINFO
をvalidate、それより後ろのサービスにAuthorization headerに入れてリクエストマイクロサービスはtokenをデコード、validate, 情報の取得を行う
ポイント
session_idとJWT両方を扱う この解説書自体モノリシックからマイクロサービスへの移行を前提としているので依然としてサーバーローカルでのセッション管理を用いている。
マイクロサービス前提ならJWTだけで良さそう。
USERINFOはAPI Gatewayより前ではcookieに入れて扱う
ブラウザベースのクライアントとサーバー間の部分ではcookieを使い、サーバー間通信の場合はAuthorization Headerにtokenを入れる。
ローカルのストアに保存などでも良いと思うが、ブラウザがクライアントであればcookieに乗るのが安全。
マイクロサービスにリクエストがついた時点でtokenのvalidateを行う
tokenの有効期限やroleによる認可、サービス間の疎結合などの観点からGatewayだけでなく各マイクロサービスでもtokenのhandlingが必要
感想
まずマイクロサービスで作る時はAPI Gatewayが大事!! それほど大きな発見はなかったが、なんとなく実装していたパターンの意味や重要性を考え直せたのでよかった。
余談ですが、この本は無限に時間が潰せます。