我已经创建了一个带有graphql-subscriptions的apollo-server,到目前为止一切都很好。我可以在前端收到出版物。太好了!
我现在要做的只是向授权的用户发送出版物,因此,需要进行某种逻辑/测试。但是在哪里以及如何?我见过的所有示例和事情都涉及盲目地从redis服务器接收消息,并将其设置回客户端。我可以测试哪个用户已登录,但现在是什么?各个微服务将与auth /用户服务进行通信,并根据该服务决定允许的操作。没问题。但是,如何阻止redis广播到错误的用户?所有apollo-server都会监听来自redis的消息 - 不验证它们。
我唯一能想到的就是在每次广播时都有某种权限对象字段,并使用graphql对auth服务进行验证。似乎不对。我希望我的auth在微服务中完成。任何指向我正确方向的东西都会令人惊叹。
答案 0 :(得分:0)
假设您在客户端中也使用了Apollo,您可以将用于身份验证的令牌或任何其他参数发送到websocket连接。 你可以在这里阅读更多: https://www.apollographql.com/docs/react/features/subscriptions.html#authentication
在Apollo 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
希望有所帮助。