0

graphql-subscription을 사용하여 apollo-server를 만들었으므로 지금까지는 좋은 방법입니다. 프런트 엔드에서 발행물을받을 수 있습니다. 큰!graphql-subscriptions 및 microservices를 사용하는 인증 (인증이 아님) 패턴

내가 지금하고 싶은 것은 사용자에게만 명의 사용자에게 공개되기 때문에 어떤 종류의 로직/테스트를 수행해야합니다. 그러나 어디서 어떻게? 필자가 보았던 모든 예제와 것들은 맹목적으로 redis 서버에서 메시지를 수신 한 다음 다시 클라이언트에 설정하는 것과 관련되어 있습니다. 어느 사용자가 로그인했는지 테스트 할 수는 있지만 지금은 무엇입니까? 개별 마이크로 서비스는 인증/사용자 서비스와 대화하여 허용 된 조치를 결정합니다. 문제 없어. 하지만 잘못된 사용자에게 전송되는 redis 브로드 캐스트를 중지하려면 어떻게해야합니까? 모든 apollo-server는 redis의 메시지를 듣고 유효성을 검사하지 않습니다.

내가 실제로 생각할 수있는 유일한 사실은 모든 브로드 캐스트에 대한 사용 권한 개체 필드의 일종을 갖고 있으며 그래프 서비스를 사용하여 인증 서비스에 대해 유효성을 검사하는 것입니다. 보이지 않는다. 내 인증이 마이크로 서비스에서 수행되기를 바랍니다. 나를 올바른 방향으로 향하게하는 것은 놀랄 것입니다.

+0

도움이되는지 확신 할 수는 없지만 모든 알림/메시지/이벤트 소스는 메시지의 대상 사용자 ID 또는 null을 지정합니다. nodejs 서버 (모든 클라이언트가 프록시 서버 역할을하는 서버)는 해당 사용자 ID로 인증 된 클라이언트에게만 메시지를 보냅니다. 사용자 ID가 'null'이면 메시지가 브로드 캐스팅됩니다. 메시지를 여러 사용자에게 전송해야하는 경우 메시지가 곱 해집니다. 웹 클라이언트 (HTML/JS), PHP 백엔드 및 nodejs를 서버 전송 엔드 포인트로 사용합니다. –

+0

많은 도움이됩니다! 감사. 그래서 제 경우에는 아폴로 서버가 프록시이기 때문에 각 마이크로 서비스는 메시지를 보내기 전에 권한 검사를해야합니까? 프록시에 사용자 서비스 종속성이 있음을 의미합니까? – antirealm

답변

0

클라이언트에서 Apollo를 사용한다고 가정하면 웹 소켓 연결과 함께 인증에 사용하는 토큰 또는 다른 매개 변수를 보낼 수 있습니다. 당신은 자세한 내용은 여기를 읽을 수 있습니다 https://www.apollographql.com/docs/react/features/subscriptions.html#authentication

을 아폴로 서버에서는 다음 예를 들어 사용자를 인증 할 수 있습니다으로 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

희망이 있습니다.