允许django-oauth-toolkit发出jwt而不是随机字符串

问题描述 投票:3回答:1

我知道django-oauth-toolkit正在使用oauthlib和oauthlib提供了一个使用jwt而不是随机字符串的实现的示例。

但是,我不明白如何让django-oauth-toolkit发出jwt而不是随机字符串。任何人都可以提供一个示例实现或git repo我们如何做到这一点?

path('o/', include('oauth2_provider.urls', namespace='oauth2_provider')),

我不确定如何更改导入行中的视图以自定义它以允许jwts

python django
1个回答
0
投票

你可以使用django-oauth-toolkit-jwt。它可以在https://github.com/Humanitec/django-oauth-toolkit-jwt存储库中找到。

安装添加到您的点子要求:

git+https://github.com/Humanitec/django-oauth-toolkit-jwt#egg=django-oauth-toolkit-jwt

生成密钥为了生成RS256(带有SHA-256的RSA签名)公钥和私钥,请执行以下命令:

$ ssh-keygen -t rsa -b 4096 -f jwtRS256.key # don't add passphrase
$ openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub
$ cat jwtRS256.key
$ cat jwtRS256.key.pub

生产者配置要使用此库发出令牌,请按以下方式配置项目:

将oauth2_provider和oauth2_provider_jwt添加到您的INSTALLED_APPS:

settings.py

INSTALLED_APPS = (
    ...
    'oauth2_provider',
    'oauth2_provider_jwt',
)

包含新的oauth网址:

urls.py

urlpatterns = [
    ...
    url(r'^oauth/', include('oauth2_provider_jwt.urls', namespace='oauth2_provider_jwt')),
]

添加到您的MIDDLEWARE以下内容:

settings.py

MIDDLEWARE = [
    ...
    'oauth2_provider.middleware.OAuth2TokenMiddleware',
]

最后添加自定义后端身份验证:

settings.py

AUTHENTICATION_BACKENDS = (
    ...
    'oauth2_provider.backends.OAuth2Backend',
)

现在我们需要在配置中设置一个JWT_ISSUER变量,它将是发行者的名称。获取我们之前生成的RSA256私钥并将其存储在JWT_PRIVATE_KEY_RSA_变量*中。例如:

settings.py

JWT_ISSUER = 'OneIssuer'
JWT_PRIVATE_KEY_RSA_ONEISSUER = """
-----BEGIN RSA PRIVATE KEY-----
MIIBOAIBAAJAbCmbRUsLrsv0/Cq7DVDpUooPS1V2sr0EhTZAZmJhid2o/+ya/28m
...
6D0+csaGDlZ9GbrTpTJUObNENNHqfrHGfqzDxQ==
-----END RSA PRIVATE KEY-----
"""
© www.soinside.com 2019 - 2024. All rights reserved.