JWT 身份验证:使用 UI 令牌来验证 Graphene/Django (GraphQL) 查询?

2024-04-21

我正在开发一个具有以下架构的项目:

  • UI:通过 Node 服务器、GraphQL 的 Apollo 客户端对客户端和服务器端渲染进行反应,

  • API:Django 通过 Graphene 处理 GraphQL 查询。

我使用 Auth0(基于 JWT)进行前端身份验证。我想使用我获得的令牌在 GraphQL 查询 API 端的上下文中对我的用户进行身份验证。

[Edit2]

要将令牌传递给我的 API,我使用:

const idToken = cookie.load('idToken') || null;
networkInterface.use([{
  applyMiddleware(req, next) {
    if (!req.options.headers) {
      req.options.headers = {};  // Create the header object if needed.
    }
    req.options.headers.authorization = `Bearer ${idToken}`;
    next();
  }
}]);

然后我需要在 Django 中检索它:我使用 django-jwt-auth 和 @Craig Ambrose 提出的代码。

我的授权标头已被接收并解码(我可以获取有效负载),但验证签名时出现问题:我收到“解码签名时出错”。

这很奇怪,因为当我在 jwt.io 上测试签名时,签名已得到验证。

我如何在 Django 端进行身份验证?


我刚刚使用 django-jwt-auth (不使用 Auth0)完成此操作

例如,该包提供了一个 JSONWebTokenAuthMixin,您可以将其与 graphene_django 中的 GraphQLView 结合使用。

from jwt_auth.mixins import JSONWebTokenAuthMixin

class AuthGraphQLView(JSONWebTokenAuthMixin, GraphQLView):
    pass

urlpatterns = [
    url(r'^graphql', csrf_exempt(AuthGraphQLView.as_view(schema=schema))),
    url(r'^graphiql', include('django_graphiql.urls')),
]

这可行,但我发现 graphiql 停止工作,因为它没有发送到令牌。出于开发目的,我想继续使用基于 cookie 的身份验证,因此将其更改为以下内容。

from jwt_auth.mixins import JSONWebTokenAuthMixin

class OptionalJWTMixin(JSONWebTokenAuthMixin):
    def dispatch(self, request, *args, **kwargs):
        auth = get_authorization_header(request)
        if auth:
            return super(OptionalJWTMixin, self).dispatch(request, *args, **kwargs)
        else:
            return super(JSONWebTokenAuthMixin, self).dispatch(request, *args, **kwargs)


class AuthGraphQLView(OptionalJWTMixin, GraphQLView):
    pass

urlpatterns = [
    url(r'^graphql', csrf_exempt(AuthGraphQLView.as_view(schema=schema))),
    url(r'^graphiql', include('django_graphiql.urls')),
]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JWT 身份验证:使用 UI 令牌来验证 Graphene/Django (GraphQL) 查询? 的相关文章

随机推荐

  • 需要帮助升级我的 Rails 版本

    我是 Ruby on Rails 新手 我需要将我的rails版本从1 2 3升级到2 3 5 我在windows环境下使用mysql数据库工作 您能帮我清楚地说明升级rails版本所涉及的步骤吗 谢谢 正如您所说 您想要升级当前应用程序的
  • 在 JavaCameraView 中设置帧速率

    我想使用 JavaCameraView 将帧速率设置为 1 fps 当我打开相机时 帧速率约为 20 fps 我的目的是改变这个值 单击按钮后 1 fps 有人可以帮助我吗 我在互联网上搜索了很多 但我找不到任何有趣的东西 在文档中也htt
  • 无法在 Android 上使用 XOAUTH 连接到 Gmail IMAP

    我正在构建一个使用 Gmail 来备份一些数据的应用程序 我使用 XOAUTH 连接到 Gmail 并获取令牌和秘密 但我无法连接到 Gmail 的 IMAP 服务 我按照以下示例进行操作http code google com p goo
  • 将 HTML 作为 PHP 执行

    当我尝试将 PHP 嵌入到 HTML 文件中时 它不起作用 我编辑了 htaccess 以便将 HTML 文件视为 PHP 但是当我尝试访问 html 文件时 我的浏览器会下载它 而不是解析和显示它 编辑 我的 htaccess 内容 Ad
  • Java 源文件中可以有宏吗

    在我的程序中 我多次从控制台读取整数 每次 我都需要输入这一行 new Scanner System in nextInt 我习惯了 C C 我想知道我是否可以定义类似的东西 define READINT Scanner System in
  • Go 中通过 new(Type) 和 &Type{} 分配内存的区别

    考虑以下示例 type House struct func main house1 new House house2 House fmt Printf T T n house1 house2 Output main House main H
  • 超级丑陋的数字

    所以问题是 编写一个程序来查找第 n 个超级丑数 超级丑数是正数 其所有素数因子都在给定素数列表中 大小为 k 的素数 例如 1 2 4 7 8 13 14 16 19 26 28 32 是给定素数的前 12 个超级丑数的序列 2 7 13
  • 使用 v2.0 端点的声明中缺少 UPN

    我已经设置了一个类似于 Microsoft 的以下示例的项目 其中我有一个本机应用程序请求使用 v2 0 端点访问 Web api https github com azureadquickstarts appmodelv2 nativec
  • 通过SPARQL UPDATE从本体中删除空白节点

    我在 SPARQL UPDATE 插入 操作的帮助下将一些数据存储在 protege 中制作的本体模型中 以下是更新查询 PREFIX test
  • Direct3D 中的矩阵多阶

    关于在 Direct3D 中乘法矩阵以获得结果 我收到了两个相互矛盾的答案 教程确实规定从左到右相乘 这很好 但这不是我想象的方式 这是一个例子 OpenGL 从上到下阅读 GLRotatef 90 0f GLTranslatef 20 0
  • 将操作添加到自定义 UITableViewCell

    我正在构建一个简单的应用程序 其中包含填充了自定义视图单元格的表格视图并使用故事板 我想在用户每次点击单元格时在单元格上添加一个操作 到目前为止 我尝试创建一个IBOutle将我的手机连接到我的tableViewController并在代码
  • .net Ajax calendarExtender 在 IE7 中剪切星期六(在 Firefox 中工作正常)

    我在 IE7 中遇到了这个问题 日历中似乎缺少星期六 它在 Firefox 中显示良好 一些人建议这可能是我的其他样式表搞乱了它 所以我现在使用自定义日历 CSS 主题 但我仍然遇到同样的问题 有任何想法吗 使用的 ajax 工具包是否存在
  • GCP 计算实例的公共实例 CNAME

    Azure 提供了一种使用以下方式访问 VM 的方法 cloudapp net GCP中有类似的东西吗 如果是 我在哪里 如何查看访问实例的确切 CNAME 我读到它 googleapi com 但无法在 GCP 门户上的任何位置找到它 N
  • Scrapy - 抓取时发现的抓取链接

    我只能假设这是 Scrapy 中最基本的事情之一 但我就是不知道如何去做 基本上 我会抓取一页来获取包含本周更新的网址列表 然后我需要一一进入这些网址并从中获取信息 我目前已经设置了两个刮刀 并且它们可以完美地手动工作 因此 我首先从第一个
  • 单个字符串可以包含多行吗?

    例如 如果我将多行分配给一个字符串 如下所示 while line reader readLine null output line n 我是否可以将带有行分隔符的输出作为一个字符串返回 我正在编写一个具有客户端和服务器程序的套接字程序 其
  • ASP.NET 从母版页调用控制器方法?

    在 ASP NET MVC2 中 如何从母版页调用控制器方法 举例来说 我想在主数据中包含一些概述数据 Logo Welcome xyz total sales this month 999 Home Sales Import Export
  • 我可以让 H2 在内存数据库中自动创建模式吗?

    我已经看过了内存中的 H2 数据库 通过 Spring Hibernate 初始化模式 https stackoverflow com questions 1945175 h2 database in memory init schema
  • 抛出旧异常的同时抛出新异常

    如果在由异常引起的堆栈展开期间 C 中的析构函数抛出异常 则程序将终止 这就是为什么析构函数永远不应该在 C 中抛出 示例 struct Foo Foo throw 2 whoops already throwing 1 at this p
  • Java - 设置jScrollBar的位置

    我在 JScrollPane 中有一个 JTable 该表每隔一段时间就会获取新的数据行 最终 数据行数超出了一次显示的数量 因此 ScrollPane 启动 我希望 Scroll Pane 在每次添加新数据时跳到底部 到其最大值 所以我写
  • JWT 身份验证:使用 UI 令牌来验证 Graphene/Django (GraphQL) 查询?

    我正在开发一个具有以下架构的项目 UI 通过 Node 服务器 GraphQL 的 Apollo 客户端对客户端和服务器端渲染进行反应 API Django 通过 Graphene 处理 GraphQL 查询 我使用 Auth0 基于 JW