首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django-oauth-用于发布JWT令牌的工具包

django-oauth-用于发布JWT令牌的工具包
EN

Stack Overflow用户
提问于 2019-03-03 18:22:07
回答 1查看 1.3K关注 0票数 0

技术堆栈Django1.10.8 + Python3.6 + docker + React + Axios.js

在这种情况下,我需要进行服务器到服务器的调用,为此,我使用Django-OAuth-toolkit。如何将此令牌转换为颁发JWT令牌?

{ "access_token":"txxxxxxxxxxxxxxxxxxxxxFB45a","expires_in":36000,"token_type":“承载”,“作用域”:“读写群组”,"refresh_token":“16oKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

{ "access_token":"xxxxxxxx.xxxxxx.xxxxx","expires_in":36000,"token_type":“承载”,"scope":“读写组”,"refresh_token":"xxxxxxxx.xxxxxx.xxxxx“}

我使用过https://github.com/Humanitec/django-oauth-toolkit-jwt/,但我认为我使用的django-oauth-toolkit版本是不兼容的。

EN

回答 1

Stack Overflow用户

发布于 2019-06-13 10:38:00

我通过将oauthlib.oauth2.Server子类化解决了这个问题

代码语言:javascript
复制
class OauthServer(oauth2.Server):
    def __init__(self, request_validator, token_expires_in=None, token_generator=None, *args, **kwargs):
        token_generator = custom_token_generator
        super().__init__(request_validator, token_expires_in, token_generator, *args, **kwargs)

custom_token_generator函数将生成jwt令牌

代码语言:javascript
复制
def custom_token_generator(request, refresh_token=False):
    client_code = request.user and request.user.client.codigo

    now = datetime.now()
    payload = {
        'iat': int(now.timestamp()),
        'exp': int(expires.timestamp()),
    }
    if client_code:
        payload['org'] = client_code
    return jwt.encode(payload, settings.JWT['EC_PRIVATE_KEY'].encode(), algorithm='ES256').decode('ascii')

它不是理想的JWT,但您可以根据需要进行修改,唯一的问题是将AccessToken和RefreshToken token字段更改为TextField,因为JWT的长度将远远超出限制

代码语言:javascript
复制
from oauth2_provider.models import AbstractAccessToken, AbstractRefreshToken

class AccessToken(AbstractAccessToken):
    token = models.TextField()

class RefreshToken(AbstractRefreshToken):
    token = models.TextField()

django-oauth-toolkit docs将提供有关在django设置上覆盖这些字段的更多信息

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54967820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档