如何自定义 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 响应的有效负载部分的主要内容,如果未能解决你的问题,请参考以下文章
额外的声明不会通过自定义 TokenEnhancer 添加到 JWT 有效负载
使用 keycloak 将自定义键/值添加到 JWT 令牌有效负载或用户