如何自定义 JWT 响应的有效负载部分

Posted

技术标签:

【中文标题】如何自定义 JWT 响应的有效负载部分【英文标题】:How to customize the payload section of the JWT response 【发布时间】:2017-02-17 23:05:39 【问题描述】:

我需要做什么来自定义 url(r'^auth/login/', obtain_jwt_token) 视图以允许我将数据添加到 JWT 令牌

我有一个供独立 Web 应用程序使用的 django-rest-framework API。我想要的是将登录用户的角色和权限以及 djangorestframework-jwt 已经返回的内容返回到 Web 应用程序。

我已经在 python 字典中拥有这些角色,但我无法弄清楚覆盖默认负载需要什么。

user_payload = 'user': 用户,'roles': 角色

我认为这就像用我的 user_payload 替换 payload = jwt_payload_handler(user) 中的“用户”一样简单,但随后出现序列化程序错误。有更清洁/更简单的方法吗?

djangorestframework==3.4.7, djangorestframework-jwt==1.8.0

【问题讨论】:

【参考方案1】:

JWT_RESPONSE_PAYLOAD_HANDLER 负责控制登录或刷新后返回的响应数据。覆盖以返回自定义响应,例如包括用户的序列化表示。

默认返回 JWT 令牌。

例子:

def jwt_response_payload_handler(token, user=None, request=None):
    return 
        'token': token,
        'user': UserSerializer(user).data
    

默认为'token': token

【讨论】:

这很好并且有效。但是,我如何能够将“内容”添加到令牌本身?我希望能够“操纵”令牌的私有部分,以便当网络应用稍后向我发送令牌时,我从令牌中获取信息,而不是重新从数据库中获取它。.. 我认为JWT_PAYLOAD_HANDLER 设置适用于这种情况。根据文档,它说你可以Specify a custom function to generate the token payload

以上是关于如何自定义 JWT 响应的有效负载部分的主要内容,如果未能解决你的问题,请参考以下文章

在MEAN堆栈应用程序中自定义JWT令牌的有效负载

如何使用 JJWT 从有效负载中获取自定义字段

额外的声明不会通过自定义 TokenEnhancer 添加到 JWT 有效负载

使用 keycloak 将自定义键/值添加到 JWT 令牌有效负载或用户

如何自定义 ASP .NET Web API JWT 令牌响应?

使用 JWT 进行护照身份验证:如何将护照的默认未经授权响应更改为我的自定义响应?