graphql订阅和微服务的授权(而不是身份验证!)模式



我已经创建了一个带有graphql订阅的apollo服务器,到目前为止一切都很好。我可以在前端接收出版物。太棒了

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

我唯一能真正想到的是在每个广播上都有某种权限对象字段,并使用graphql根据身份验证服务对其进行验证。似乎不对。我想在微服务中完成我的授权。任何能给我指引正确方向的东西都会令人惊叹。

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

在Apollo服务器中,您可以对用户进行身份验证,例如在Connect上:https://www.apollographql.com/docs/graphql-subscriptions/authentication.html

您还可以在令牌中烘焙一些声明,定义用户是否可以连接、发布或接收消息,然后将令牌或已验证的用户传递给Redis,如果您将相应地调用您的user/auth服务来验证用户,然后继续。

您还可以在解析订阅/消息的onOperation中添加验证,以验证例如订阅频道/主题的用户。我强烈建议您将此作为一个很好的示例阅读:https://medium.com/react-native-training/building-chatty-part-7-authentication-in-graphql-cd37770e5ab3

希望能有所帮助。

最新更新