跳转到主要内容

基于非对称密钥的HTTP API认证

项目描述

https://img.shields.io/pypi/v/asymmetric_jwt_auth.svg https://gitlab.com/crgwbr/asymmetric_jwt_auth/badges/master/pipeline.svg https://gitlab.com/crgwbr/asymmetric_jwt_auth/badges/master/coverage.svg

是什么?

这是一个用于处理服务器到服务器API请求认证的库。它使用RSA公钥/私钥对来实现这一功能。

为什么?

使用用户名和密码的标准模式对用户到服务器的请求工作得很好,但对于服务器到服务器应用程序来说却不够。在这些场景中,由于密码不需要用户记住,我们可以使用更安全的非对称密钥加密。这有一个优点,即密码永远不会实际发送到服务器。

如何?

客户端机器生成一个公钥/私钥对。然后,服务器机器将公钥提供给它,并可以选择任何它喜欢的方式存储公钥。当此库与Django一起使用时,它提供了一个模型来存储与内置用户对象关联的公钥。当发起请求时,客户端创建一个包含多个声明的JWT,并使用其私钥对其进行签名。收到后,服务器使用公钥验证声明,以确保发行者确实是他们声称的那个人。

声明(由客户端发出)包括以下组件:尝试进行身份验证的用户的用户名、当前的Unix时间戳和一个随机生成的nonce。例如

{
    "username": "guido",
    "time": 1439216312,
    "nonce": "1"
}

时间戳必须与服务器时间的±20秒内,nonce必须在给定的时间戳和用户内是唯一的。换句话说,如果用户在同一秒内发起多个请求,nonce必须更改。由于这两个因素,令牌只能使用一次,从而防止重放攻击。

要发出一个经过身份验证的请求,客户端必须按照上述格式生成JWT,并将其作为以下格式的HTTP授权头包含在内

Authorization: JWT <my_token>

重要提示:声明加密,仅签名。此外,签名只能防止声明被篡改或重用。请求的其余部分仍然容易受到篡改。因此,这并不是运输层使用SSL的替代品。

完整文档https://asymmetric-jwt-auth.readthedocs.io

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解有关安装软件包的更多信息。

源分布

asymmetric_jwt_auth-1.0.1.tar.gz (23.8 kB 查看散列值)

上传时间

构建分布

asymmetric_jwt_auth-1.0.1-py3-none-any.whl (33.9 kB 查看散列值)

上传时间 Python 3

支持者