django应用程序,使用jwt管理到受保护url的一次性和过期链接。

django-jwt-expiringlinks的Python项目详细描述


django应用程序,使用jwt管理到受保护url的一次性和过期链接。

用例

此应用程序的主要用例是在- 基于请求,无需先登录站点。

典型的例子是从邮件列表中取消订阅- 您希望能够识别用户并处理请求, 但要求用户先登录会带来一个障碍。

使用jwt,我们可以“预认证”对url的访问。

假设

这不是一个通用的链接生成应用程序-它有一些隐含的 内置假设:

  • 链接正在发送给单个用户
  • 收件人是已知的django用户
  • 生成的令牌仅对初始请求进行身份验证
  • 令牌将not登录用户
  • 链接不敏感,并且不包含敏感数据

实施

所使用的底层技术是jwt-有关更多信息,请参见jwt.io 具体细节。总结是,它可以用于基于任意json负载生成base64编码和签名的令牌。该签名用于确保有效负载未被篡改。有效负载本身不加密,任何人都可以解码,因此确保不包含敏感数据。(注意:您可以对令牌进行加密,但基本假设是您不发送敏感数据,您只需确保接收的数据与发送的数据相同即可。)

django中的实现包括两个部分:在离开应用程序时将令牌添加到url(例如,在电子邮件中),然后在有人单击链接并返回到站点时验证令牌。

为了添加令牌,您需要创建一个新的requestToken对象,并且 然后对其调用encode方法。这将返回3部分签名的jwt (header.payload.signature)。您需要用 收件人User,和目标url-以确保仅使用令牌 访问预期的端点。

。代码::python

>>> from django_jwt.models import RequestToken
>>> # create a new RequestToken, and encode the contents
>>> token = RequestToken.objects.create_token(
...     user=User.objects.filter(...),
...     target_url=reverse('foobar')
... ).encode()
>>> token
1234567.qwertyuiop.zxcvbnm
>>>

现在,您有一个绑定到标记集url的标记和一个预期的收件人。 如果用户(任何user-remmember,我们是not正在验证最终用户)单击此url,他们将作为未经验证的用户到达端点。如果url需要身份验证,请求将失败,因为用户尚未进行身份验证。

为了使用jwt而不是完全身份验证,我们必须在view函数中添加一个decorator来扩展令牌,验证它(防止篡改,并符合令牌负载的“not before time”和“expiration time”属性),然后设置用户。

decorator执行一个更重要的任务,在函数运行之后-它记录令牌的使用-从请求中提取源IP和用户代理(用于审核目的),并更新令牌use_count属性以及响应状态代码-这允许对令牌的使用进行细粒度的报告。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java A*(星型)算法|有墙时如何返回?   java我可以在libGDX中使用透视摄影机渲染SpriteBatch吗?   java查找字符串中最长的单词   多种java servlet身份验证方法   java如何将意图从(添加)proximityalert获取到broadcastreceiver?   java如何连接到特定的wifi网络?   java使用jframe在mat中显示图像(OpenCV 3.00)   java获取字符串的偏移量   selenium如何在远程机器上使用java robot类   java Ilegal格式转换问题   java无法在新安装的mac上以调试模式在eclipse中启动应用程序   如何在ubuntu中安装java软件的依赖项。?   加密Bouncy Castle vs Java默认RSA with OAEP   打印printStackTrace方法时,java尝试块开始打印