【问题标题】:How to set API keys for non-authentication models in Django?如何在 Django 中为非身份验证模型设置 API 密钥?
【发布时间】:2022-01-17 21:55:56
【问题描述】:

我正在为商店开发库存跟踪器,其中每家商店都可以有多个商店。我正在将 Django 与 Django Rest 框架一起使用。

每个商店都是一个身份验证模型。因此,它可以通过登录系统管理其各自的插座和设置。

在当前状态下,每个门店使用相同的商店模型令牌(由 DRF 提供)在销售时连接和更新库存。在我看来,这会造成安全漏洞。例如,如果一家商店有数百个 outlet,并且其中一个 outlet 的 API 密钥被公开,则所有 outlet 都被公开。

有没有办法为每个出口生成一个身份验证令牌?这样,商店可以管理并在需要时更新每个商店的令牌。

另外,我将如何在 DRF 视图和/或序列化程序中验证此令牌?

【问题讨论】:

    标签: python django authentication django-rest-framework django-authentication


    【解决方案1】:

    第一季度:

    有没有办法为每个出口生成一个身份验证令牌?

    完整记录在Customization 部分。例如,对于您的代码,每个插座都有几个键:

    # stores/models.py
    from django.db import models
    from rest_framework_api_key.models import AbstractAPIKey
    
    class Store(models.Model):
        name = models.CharField(max_length=128)
    
    class Outlet(models.Model):
        name = models.CharField(max_length=128)
        store = models.ForeignKey(
            Store,
            on_delete=models.CASCADE)
    
    class OutletAPIKey(AbstractAPIKey):
        outlet = models.ForeignKey(
            Outlet,
            on_delete=models.CASCADE,
            related_name="api_keys",
        )
    
    

    你可以manage keys on admin panel

    第二季度:

    另外,我将如何在 DRF 视图和/或序列化程序中验证此令牌?

    下面的programmatic usage 文档应该是这样的:

    from rest_framework.views import APIView
    from rest_framework_api_key.models import APIKey
    from rest_framework_api_key.permissions import HasAPIKey
    
    from .models import Project
    
    class ProjectListView(APIView):
        permission_classes = [HasAPIKey]
    
        def get(self, request):
            """Retrieve a project based on the request API key."""
            key = request.META["HTTP_AUTHORIZATION"].split()[1]
            outlet_api_key = OutletAPIKey.objects.get_from_key(key)
            outlet = outlet_api_key.outlet
    

    【讨论】:

      猜你喜欢
      • 2011-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-15
      • 1970-01-01
      • 2021-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多