使用 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