Django JWT - 如果正文中的密钥有效,则允许没有凭据的请求

Posted

技术标签:

【中文标题】Django JWT - 如果正文中的密钥有效,则允许没有凭据的请求【英文标题】:Django JWT - Allow request with no credential if key in body is valid 【发布时间】:2021-11-06 08:11:21 【问题描述】:

我有一个需要访问令牌进行身份验证的端点。 同样在此端点中,有一个不需要的序列化程序 UUID 字段。 我想做的是:

如果 UUID 字段在正文中传递,请检查此 UUID 是否有效并在数据库中注册。 如果它无效,则会引发 DRF ValidationError。 如果未传递任何 UUID 字段,则需要使用访问令牌对请求进行身份验证。

有没有办法进行这种选择性的身份验证?

【问题讨论】:

你检查了吗:***.com/questions/64496495/… 谢谢,我去看看 【参考方案1】:

好吧,过了一段时间我想出了解决方案。 我向任何用户开放了访问视图的权限,并且在 post 方法中,我验证了用户是否是匿名的,以便检查请求正文键。如果传递了有效的 JWT 访问令牌,则会找到一个用户,这将返回 False。如果这些条件中的任何一个返回 True,则会给出一个简单的凭据错误响应。

permission_classes = [
    AllowAny,
]

def post(self, request, *args, **kwargs):
    if request.user.is_anonymous:
        request_token = request.POST.get('token')
        token = Token.objects.filter(token=request_token)
        if token.exists() and token.values()[0]['status'] == 'valid':
            pass
        else:
            return Response(
                data="Invalid Credentials": "Pass a valid credential.",
                status=status.HTTP_200_OK,

【讨论】:

以上是关于Django JWT - 如果正文中的密钥有效,则允许没有凭据的请求的主要内容,如果未能解决你的问题,请参考以下文章

JWT 无法从密钥中破译

与对称密钥相比,用对称密钥签名JWT会更有用吗?

使用 RSA 算法 Django Rest Framework 简单 JWT 时出现错误无法反序列化密钥数据

JWT,使用存储在 DB 中的动态密钥

GraphQL - JWT - 更改 verifyToken 突变的有效负载 - django

如何在没有密钥或没有验证的情况下解码 php/laravel 中的 jwt?