0

私はgraphqlサブスクリプションでapollo-serverを作成しました。私はフロントエンドで出版物を受け取ることができます。すばらしいです!graphql-サブスクリプションとマイクロサービスによる認証(認証ではない!)パターン

私が今やってみたいのは、の許可を受けたのユーザーにのみ公開しているので、何らかのロジック/テストが必要です。しかしどこでどのように?私が見てきたすべての例と事柄は、盲目的に赤いサーバーからのメッセージを受信し、それをクライアントに戻すことを伴います。どのユーザーがログインしているかはテストできますが、今は何ですか?個々のマイクロサービスは、認証/ユーザーサービスと対話し、それに基づいて許可されたアクションを決定します。問題ない。しかし、どのように私は間違ったユーザーに赤ちゃんの放送を止めるのですか?すべてのapollo-serverは、redisからのメッセージをリッスンします - 検証しません。

私が実際に考えることができる唯一のことは、すべてのブロードキャストにいくつかの種類のアクセス許可オブジェクトフィールドがあり、それを認証サービスに対して検証するためにgraphqlを使用することです。正しいとは思わない。私はマイクロサービスでの私の認証をしたい。正しい方向に私を指し示すものはすばらしいでしょう。

+0

これは役に立ちますが、これが私の目的です。すべての通知/メッセージ/イベントソースは、メッセージの宛先ユーザーIDまたはnullを指定します。 nodejsサーバー(すべてのクライアントが接続され、プロキシーとして動作するサーバー)は、そのユーザーIDで認証されたクライアントにのみメッセージを送信します。ユーザIDが「ヌル」の場合、メッセージはブロードキャストされる。メッセージを複数のユーザーに送信する必要がある場合は、メッセージが乗算されます。私はWebクライアント(HTML/JS)、PHPバックエンド、Nodejsをサーバー送信エンドポイントとして使用します。 –

+0

多くの助けになります!ありがとう。だから私の場合は、アポロサーバーはプロキシなので、各マイクロサービスはメッセージを送信する前に承認チェックを行う必要がありますか?私はそれがプロキシにユーザーサービスの依存関係があることを意味しますか? – antirealm

答えて

0

クライアントでApolloも使用していると仮定すると、認証に使用するトークンまたはその他のパラメータをwebsocket接続と一緒に送信できます。 あなたはもっとここで読むことができます。 https://www.apollographql.com/docs/react/features/subscriptions.html#authentication

をアポロServerではあなたは、その後、たとえば、ユーザを認証できるのonConnect: https://www.apollographql.com/docs/graphql-subscriptions/authentication.html

あなたはまた、ユーザーが接続できるかどうかを定義するトークンにいくつかの主張を焼くことがあり、発行または受信し、トークンまたは検証済みのユーザーをRedisに渡す必要があります。そうしないと、ユーザー/認証サービスを呼び出してユーザーを確認し、次に処理を続行します。

サブスクリプション/メッセージを解析するonOperationに検証を追加して、たとえばチャネル/トピックに加入しているユーザーを検証することができます。 これを素晴らしいサンプルとして読むことを強くお勧めします: https://medium.com/react-native-training/building-chatty-part-7-authentication-in-graphql-cd37770e5ab3

関連する問題