【问题标题】:Add API key to a header in a DRF browsable API page将 API 密钥添加到 DRF 可浏览 API 页面中的标头
【发布时间】:2021-05-11 05:31:28
【问题描述】:

我正在我的 API 上启用令牌/api-key 身份验证。但是一旦启用它,我就不能再使用 DRF 的可浏览 API 页面了。我知道我可以在开发时禁用身份验证,但这是一个好奇的问题:我可以在发送到可浏览 API 页面的每个请求的标头中添加一个 api-key 吗?我可以通过调整浏览器设置来做到这一点吗?或者是否可以调整 Browsable API 页面本身并将 api-key 硬编码到其中?

【问题讨论】:

    标签: django api browser django-rest-framework


    【解决方案1】:

    处理这种情况的更好方法是将SessionAuthentication 添加到设置中的DEFAULT_AUTHENTICATION_CLASSES部分

    # settings.py
    
    REST_FRAMEWORK = {
        "DEFAULT_AUTHENTICATION_CLASSES": [
            "rest_framework.authentication.TokenAuthentication",
            "rest_framework.authentication.SessionAuthentication",
        ],
    }

    更准确地说,

    # settings.py
    
    REST_FRAMEWORK = {
        "DEFAULT_AUTHENTICATION_CLASSES": [
            "rest_framework.authentication.TokenAuthentication",
        ],
    }
    if DEBUG:
        REST_FRAMEWORK["DEFAULT_AUTHENTICATION_CLASSES"].append(
            "rest_framework.authentication.SessionAuthentication"
        )

    通过这样做,您可以任一使用您的APIKeysession key 来验证请求。

    【讨论】:

    • 但我想它与权限类不一样?我正在使用 restframework-api-key 第三方应用程序。它适用于权限:"rest_framework_api_key.permissions.HasAPIKey"。但是你的建议很好,我现在正在使用if DEBUG 技巧来覆盖默认权限类。
    • 身份验证和授权是两个不同的东西。就您而言,我想知道他们为什么将其实现为 authorization
    • 我认为这样做是为了启用基于每个视图/api-endpoint 的控制。因此,同一用户可能被授权使用我系统的某些部分,但如果他想使用另一部分,则需要提供 api-key。
    猜你喜欢
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 2017-12-27
    • 2019-05-02
    • 1970-01-01
    • 2019-09-22
    • 1970-01-01
    • 2016-06-14
    相关资源
    最近更新 更多