0

我已经创建了一个带有 graphql-subscriptions 的 apollo-server,到目前为止一切都很好。我可以在前端接收出版物。伟大的!

我现在要做的只是将出版物发送给授权用户,因此需要进行某种逻辑/测试。但是在哪里以及如何?我见过的所有示例和事情都涉及盲目地从 redis 服务器接收消息,并将其设置回客户端。我可以测试哪个用户登录了,但现在呢?各个微服务将与身份验证/用户服务对话,并据此决定允许的操作。没问题。但是如何阻止 redis 广播到达错误的用户?apollo-server 所做的只是监听来自 redis 的消息——而不是验证它们。

我唯一能真正想到的就是在每次广播中都有某种权限对象字段,并使用 graphql 来针对 auth 服务对其进行验证。似乎不对。我希望我的身份验证在微服务中完成。任何指向我正确方向的东西都会很棒。

4

1 回答 1

0

假设您也在客户端中使用 Apollo,您可以将用于身份验证的令牌或任何其他参数发送到 websocket 连接。您可以在此处阅读更多信息: https ://www.apollographql.com/docs/react/features/subscriptions.html#authentication

在 Apollo 服务器中,您可以对用户进行身份验证,例如 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

希望有帮助。

于 2017-12-13T16:31:56.433 回答