2017-02-01 3 views
0

WebサービスでJSONとして返す特定のクライアントデータを特定しようとしています。私はこれが正しい方法であるとは確信していません、そして、私はいくつかのアドバイスが大好きです。これは、Webサービスがマルチテナントデータベースとやり取りする良い方法ですか?

それが現在動作する方法は次のとおりです。

  1. データベースのテーブル、彼らが所属する適切なのcompany_idを持つユーザーのために。
  2. ログインすると、認証サービスはトークンペイロード内のcompany_idを使用してJWTトークンを発行します。
  3. クライアントはトークンと共にHTTP要求を送信します。その後、サービスがトークンの有効性を確認した後、特定のルートがWHERE company_id = company_id_in_tokenを実行するSQLでデータを返します。

私はに実行している赤いフラグは次のとおりです。トークンペイロード内のユーザデータを持つ

  1. 。 SSLはこれを否定しますが、私は悪いデザインが心配です。
  2. にcompany_id列を含めると、すべての単一テーブルがフィルタリングされます。

新しいものをリッピングするようお願いします。

+0

tokeリンクをuser_idに戻す必要がありますか?あなたはcompany_idを取得するためにそれを使用できませんか?すべての単一のテーブルにcompany_idを持つことについては、会社のテーブルに参加するクエリにSQL結合を含めることの問題かもしれません。もしcompany_idなしで結合できれば、そのテーブルに列を含める必要はありません – Dijkgraaf

答えて

0

OpenID仕様を参照すると、id_tokenを送信するが、後で検証できるように署名することが記載されています。また、upnまたはsub請求が利用可能な場合、このデータからテナントを推論することができます。しかし、ユーザーの質問が別のテナントのために働く場合、テナントを推測するために特別なヘッダーが必要です。例えば、コンテキストのテナントは、コンテキストの下でテナントを含むヘッダーにすることができます。

テナントID列がある場合は、コアビジネスオブジェクトテーブルにテナントID列を持つことをお勧めします。コア・ビジネス・オブジェクトに依存しているテナントID列は、それ自体が意味を持たないため、テーブルには存在しません。

HTH

関連する問題