gpt4 book ai didi

node.js - JWT 认证 : Use UI token to authenticate Graphene/Django (GraphQL) queries?

转载 作者:搜寻专家 更新时间:2023-10-31 23:08:04 30 4
gpt4 key购买 nike

我正在从事一个具有以下架构的项目:

  • UI:通过 Node 服务器、Apollo Client for GraphQL 在客户端和服务器端呈现 React,

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

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

[编辑2]

为了将 token 传递到我的 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 提出的代码。

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

这很奇怪,因为当我在 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 停止工作,因为它没有发送到 token 。出于开发目的,我想为此继续使用基于 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')),
]

关于node.js - JWT 认证 : Use UI token to authenticate Graphene/Django (GraphQL) queries?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38884611/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com