django-oauth-toolkit 用于颁发 JWT token

标签 django django-oauth

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

我遇到了一种情况,我需要进行服务器到服务器的调用,为此我使用 Django-OAuth-toolkit。如何将此 token 转换为发行 JWT token ?

{ “access_token”:“txxxxxxxxxxxxxxxxxxxxxFB45a”, “过期时间”:36000, "token_type": "承载者", "scope": "读写组", “refresh_token”:“16oKxxxxxxxxxxxxxxxxxxxxx” }

{ "access_token": "xxxxxxxx.xxxxxx.xxxxx", “过期时间”:36000, "token_type": "承载者", "scope": "读写组", "refresh_token": "xxxxxxxx.xxxxxx.xxxxx" }

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

最佳答案

我通过子类化 oauthlib.oauth2.Server

解决了这个问题
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 token

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 长度将远远超过限制

from oauth2_provider.models import AbstractAccessToken, AbstractRefreshToken

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

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

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

关于django-oauth-toolkit 用于颁发 JWT token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54967820/

相关文章:

django - 如何在 Django 2.1 中包含 DRF 3.8 路由器 url 模式

python - DjangoQ 运行 manage.py qcluster 导致 PermissionError : [WinError5] Access is denied

django - 是否可以在启动时自动运行 celery?

python - OAuth2 TokenScope 与 Django Permissions 类似吗?

python - Django-rest-framework 与 django OAuth 2.0 提供身份验证错误

django - 使用 Django QuerySet 分块处理数据库的最佳方法?

python - Django Haystack SOLR 中的排序顺序

python - 将身份验证请求发送到 OAuth 2.0 Django rest Framework 时获取权限问题

python - 如何允许用户在 Django Rest Framework 中仅修改他的数据