2017-03-22 8 views
3

私は今、モノリシックアプリケーションをマイクロサービス(専用レールアプリ)に分離しようとしています。サービス?Rails:Knock(JWT)を使用した専用認可サービスとアプリサービスを備えたマイクロサービスアーキテクチャ

たとえば、認証目的のユーザーモデルを持つ 'ノック'宝石の6種類のRails APIサービスがあります。 これらのサービスはすべて1つのユーザーデータベースを共有します。

私はユーザーモデルで専用サービスを実装したいが、他のサービスがトークンを持つユーザーをどのように検証するのか?

また、ユーザーが使用できるサービスと使用できないサービスを制御できます。だから、AccessRoleサービスが必要ですか?

ドラフトケース:

  1. ユーザーがauth_serviceは何とかauth_serviceからのメッセージを持って、「記事にアクセスするためのユーザーの役割を検証し、クライアント
  2. access_serviceからトークンを検証している「記事」(フロントエンドのUIクライアント)
  3. に行きます'リソース。
  4. articles_service jsonデータでクライアントに応答を送信します。ここで

いくつかのより多くの質問:

  1. access_serviceがauth_serviceと通信する方法は? 1人のユーザーデータベースを使用してユーザーの資格情報と役割を確認する必要がありますか?
  2. articles_serviceなど - 公共にアクセスせずにプライベートサービスになり、ユーザーにブラックボックスとして機能する必要がありますか?

答えて

0

私はこの問題に取り組んできましたが、そこには良い文書化された解決策はありません。私がやることは、ユーザーとアクセス制御リスト(ACL)を管理するサービスを構築することです。

  1. アイデンティティサービス - これは、クライアントがAPI内の他のサービスへのアクセスを許可する場所です。

login [POST] email password

これは、ペイロード部に以下の情報を持っていることをJWTトークンを返します。

  1. ユーザーID
  2. ACLは可能性がACL

所有している許可されたロールの配列このようにして、クライアントがAPIに要求を行うと、要求に応答するサービスはユーザーID(Knock-current_user)でイントロスペクトされ、ペイロードからACLを取得できます。非常に簡単に私はbefore_actionを追加して、適切な役割を確認すると思います。

関連する問題