使用 RSA 算法 Django Rest Framework 简单 JWT 时出现错误无法反序列化密钥数据

Posted

技术标签:

【中文标题】使用 RSA 算法 Django Rest Framework 简单 JWT 时出现错误无法反序列化密钥数据【英文标题】:Error Could not deserialize key data when Using RSA Algorithm Django Rest Framework Simple JWT 【发布时间】:2021-04-08 03:11:26 【问题描述】:

在使用 django rest 框架和简单的 jwt 身份验证和 RSA 算法时出现错误。

当我使用 HS 算法时,我的代码运行良好,但是当我将算法更改为 RS 时,出现以下错误:

无法反序列化关键数据。数据可能格式不正确,或者可能使用加密 不支持的算法。

我的设置:

SIMPLE_JWT = 
    'ALGORITHM': 'RS512',
    'SIGNING_KEY' : 'ssh-rsa MIIBPAIBAAJBALZ+WuuTIol2cwEALcqn+/d0AER+sX269KVZt7sdl9C0QcspNHvHGYBWLoYIV5i72fsINX4V5IvkqsIn83O4jQMCAwEAAQJBAJ8E/Y73GAo2V8IQeNZ1iH646x7EUz9e8J1Az3PSNp7ZZ4tNjEhyA817qQGT9nfvRPXqIKkKFVe0THfmWmbK5cECIQD4M/qhoT2n99iIJwJq2DhbVvqx74hal+ocuboSwDZuIwIhALw58q4+YZlg79fGc2PyK8MUQLIx/i+O3bK7moMCf6OhAiEA04E/15IWf1clzsgnODMuuy9AjHaJJGIGHxpppObkuy8CIGqjwhRqD02gmAH90x5K8/RAIy9SF5rGLGC43R9gaQRBAiEAoLxLZuvXosXy6XR67ODCgZI7yB1XXVIwB73LxWXrnkk=',

    'VERIFYING_KEY' : 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALZ+WuuTIol2cwEALcqn+/d0AER+sX269KVZt7sdl9C0QcspNHvHGYBWLoYIV5i72fsINX4V5IvkqsIn83O4jQMCAwEAAQ=='


REST_FRAMEWORK = 
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ),
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
    ]

查看和其他使用Djoser Package

Request POST | http://localhost:8000/api/jwt/create/

 username : userExample,
 password : **********

注意:使用 Postman 进行测试

【问题讨论】:

【参考方案1】:

它是固定的,我只需要更改 SIGNING KEY & VERIFYING KEY 字符串

Settings.py

SIMPLE_JWT = 
        'SIGNING_KEY' : '''-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCpjDCwMjok1ez1Hr+eOnCs7Ms/hczI1pZ3txyGKrMPLN2Tof3s
gtW6fBOlpCctNo3rG00V64SDLbXHx59QTo+GBY8EdVY8KnGy8ihMpBX86aD2SngP
/pGXMBw/XjCvu7uXCQs0I52EfXmK1+/u5LgGFLizN1upQIcaJq3hm2KZPwIDAQAB
AoGAWDyQXjJVljQLNOpCuRsa5rP5dt6wW9lpx3Xxj1WLiJtF2X5Vww+4IWxPYUYT
6XDZ3QCBVqYSeZ6BWy5lmAq6oCCf56V7j/gBTB6/1aBTXBAhKIXxk040qcrGAMUW
ZoJXz6py0C16MaOQVKgHkMw7F07XovCVGWZI9dik7kOln7ECQQDhcaltBqPOprGl
kfDLx4PyCCP2HLN/vEw/UaOTtGUvc5DjvcEp/7BQsAvmCG1Y8GIHXTA1ITYIR9KI
QBwk4WsZAkEAwIcQq3CxOn7MP3XF99alrO19UXOO4D5Z7xL7mgjLjUrO/6wjMZ83
bQOt2noiCU6522RPZ53CY04h+vRQNesKFwJBAJFXYL4sOLECoKa4hsApmXQRMXX6
nPJt584uiMGx3EYSQEfCzuSPthDe3lzn8+8R0nEi7/Bgv9/oxd8XTc2tEgkCQESv
qxXO5Zu94vZ8+Pzbmk3giIYHmSCNfh5aAmNI4f3tg34ZlpC8gdSlrF+2lPAHIy2P
UvjfgptVI7BZe0hRK08CQBva/cZfIbq8HSWmLnRtzlbELg7UlRzGcIc6KElwDlid
8SOZOXGZjKY9Xll5g/ecRXgRoE0/hw6ThOrsrObHZ7w=
-----END RSA PRIVATE KEY-----
''',

    'VERIFYING_KEY' : '''-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCpjDCwMjok1ez1Hr+eOnCs7Ms/
hczI1pZ3txyGKrMPLN2Tof3sgtW6fBOlpCctNo3rG00V64SDLbXHx59QTo+GBY8E
dVY8KnGy8ihMpBX86aD2SngP/pGXMBw/XjCvu7uXCQs0I52EfXmK1+/u5LgGFLiz
N1upQIcaJq3hm2KZPwIDAQAB
-----END PUBLIC KEY-----
''',

【讨论】:

干得好。虽然我确定这是您不打算长时间使用的密钥,但您可能不应该发布它。您可能会继续使用它,并且其他人会复制/粘贴它。只要说"SIGNING_KEY": "private-key-here"等等就足够了 谢谢,这只是虚拟钥匙....我的项目没有使用这个钥匙

以上是关于使用 RSA 算法 Django Rest Framework 简单 JWT 时出现错误无法反序列化密钥数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 django rest framework 序列化一个 ManyToManyField 和一个 Through Model

Django Rest 框架 - 主 url HTTP/1.1" 404 Not Found

django drf 权限permission

django rest框架使用jwt RS256解码签名错误

无法使用服务帐户访问 Google REST Api

django drf SearchFilter与OrderingFilter