概述
现在我们已经了解了 Airlock 如何同时处理身份验证和授权,我们可以退一步检查一下一切都是否正常工作。
在本课中,我们将
- 使用GraphOS Studio来向GraphQL 查询添加标头并测试我们的身份验证设置。
在 GraphOS Studio 中测试一个查询
让我们从打开https://127.0.0.1:4000
在GraphOS Studio Sandbox.
我们将尝试一个查询,该查询需要一个已验证和授权的用户:检索房东的房源。此查询需要你以房东身份登录。
使用 Explorer,让我们生成一个查询以检索房东的房源。对于每个房源,我们将询问title
、costPerNight
、description
、photoThumbnail
、numOfBeds
和locationType
。
以下是完整的查询:
query GetHostListings {hostListings {titlecostPerNightdescriptionphotoThumbnailnumOfBedslocationType}}
让我们运行 操作,并且呃哦!我们返回一个 AuthenticationError
,未登录用户 😱
在短暂的恐慌之后,让我们思考我们缺少什么。
我们刚刚设置了 Authorization 头的服务器端处理,但我们实际上还没有 发送使用我们的请求包含那些头!因此,我们的服务器正在尝试对发送请求的用户进行身份验证,但它找不到他们的用户标记,并且它返回了适当的错误。
在 GraphOS Studio 中添加 Headers
让我们继续添加那些缺少的 Headers。
在资源管理器底部面板,打开 Headers选项卡。
单击 New header按钮。将头键设置为
Authorization
,并将值设置为Bearer user-1
。(我们知道user-1
是主机!)
Authorization: Bearer user-1
让我们再次运行 查询!现在我们有了正确的头,我们可以获得我们所要求的数据以及 所有我们需要 字段。
为了好玩,让我们检查一下如果我们询问完全相同的 字段,但作为访客,比如 user-2
,将会发生什么。将 Authorization
头的值更改为 “Bearer user-2”,然后运行 查询。
我们收到 ForbiddenError
,表示只有主机有权访问房源。但我们已以访客身份登录,所以这样很好!我们的服务器正在按预期的方式工作。
关键要点
- 您可以在 GraphOS Studio Explorer 中通过 Headers 选项卡向请求中添加标题。
结论
通过上述介绍,我们已经看到了在 GraphQL 服务器 上实施身份验证的第一个示例!我们了解了如何使用 HTTP 标题对用户进行身份验证,如何编写 field 级的授权内容,如何在 GraphQL 解析器 中添加标题,以及如何在 GraphOS Studio 中向请求中添加标题。
如果您有兴趣更深入地了解身份验证主题,请查看以下其他资源列表。
接下来,您可以查看 中间架构设计旁支任务,或者深入了解 航海系列,了解如何利用 Apollo Federation 为 graph 进行模块化。