質問: 現在簡単なwebアプリケーションを作成してマイクロサービスの概念を勉強中です。 理解した事 ----- * サービス間は疎結合にしてWebAPIで通信する * 独立性や可用性の観点からサービス間を跨ぐ情報の共有は行わない(共有DBや共有メモリ等の利用はNG) * とは言えシステム全体ではステートフル的に振る舞う必要がある為、認証認可情報を持ち回る必要がある 出来た事 ---- とりあえず、認証周りを切り出してマイクロサービス化してみました。 ログイン認証はレガシーな独自承認とgoogleのSSO承認まで出来ました。 いずれの認証方式でも汎用的にしたくJWTで管理しようと考えてます。 疑問 -- * 認証までは出来たけど後続処理でid-tokenをどう持ち回る? 今までのモノリシックなシステムではCookieにセッションIDを保存しており、サーバーへのリクエスト時にCookieヘッダフィールドによしなにセットして自動的に送信される為、リクエスト時にはセッションIDを意識しなくてもを処理が継続出来ていました。 **要は、Cookie使用時の様に透過的にid-tokenの持ち回りを処理したいと考えていますが、 クライアントサイドはどの様に実装するのがベストプラクティスでしょうか?** 下記のいずれかの方法を採用すると、クライアント側ではid-tokenの存在を特に意識(処理)する事なくid-tokenを持ち回れる様な気がするが正しい実装か? * Cookieにid-tokenを保存し自動送信させる * queryStringにid-tokenをセットする * form内にhiddenで隠す リクエスト時にhederにid-tokenをセットし送信するのが作法の様ですが、formサブミット時に自動的に送信される仕組みはないのか? `Authorization: Bearer {access-token}` 参考にしたURL -------- 上記サイトからすると、既存のWEBアプリをマイグレーションする際に全POST処理をJavascriptで送信する様に処理を追加するしか方法は無いのでしょうか? もしそうだとするとクライアント側にフレームワーク的な何かが無いと、クライアント側のコーディングに負債を抱える事になりそうな気がしています。 参考サイトでも参考書籍でもご教授頂ければ幸いです。 宜しくお願い致します。 補足 -- 既存のモノリシックシステムから都度粒度を勘案して順次マイクロサービス化出来ないかな。。と考えております。 サーバーサイドのアーキテクチャも通常のLAMPスタックからスタートしており、フルスタックでの実装がイメージ出来ておりません。 現時点でサーバーサイドでURLを処理し交通整理するフロントエンドの仕組みが必要かどうかも判断出来ておりません。 本件を考慮するにあたり、アーキテクチャ設計も必須になりますでしょうか?
回答: 全体像が見えないと何が最適なのか、などは判断が難しいと思いますが、 単にTokenの取り回しのはなしだけを考えると以下のように思いました。 ※ 全然ベストプラクティスとかは、わかりません... 対 HTML供給 Web Server * Cookieには session_id だけ入れて、サーバ側で session_id -> auto_token を持っておく。 * 理由: シンプルだし安全確実 * 補足: これが必要になるのは、HTML供給WebServerから 他のAPIサーバにTokenでアクセスすることが必要な場合になるだろう 対 他の API Server * HTML供給WebServerからTokenを取得して(JSに埋め込みか、TokenをAPIで取ってくる(ここはcookieで認証)かして) * `Authorization` Headerにtokenを入れて送信するのが良さそう * 理由: 意味的に自然?なんですかね。Headerだとサーバ側で検証ロジックがPlugin的に書きやすいですかね。