【问题标题】:Passing a token in the header of a ListAPIView endpoint from one api to another Django REST将 ListAPIView 端点标头中的令牌从一个 api 传递到另一个 Django REST
【发布时间】:2021-08-19 23:56:24
【问题描述】:

我在 Django REST 中有 2 个 API。

一个 API 生成一个 JWT 令牌。

我想将该令牌发送到另一个 API。

在第一个 API (API 1) 中,我将令牌发布到 POST 请求标头中的 ListItems 类 (/someendpoint/)。

import requests

token = "someToken"
requests.post("/posting/token", {token})

在另一个 API (API 2) 中,我想在请求标头中接收该 JWT 令牌:

在views.py中:

class ListItems(generics.ListAPIView):
    permission_classes = [ItemsPermissions]
    queryset = SomeModel.objects.all()
    serializer_class = SomeSerializer
    

在 urls.py 中:

url_patterns = [
    path("/someendpoint/list/", ListItems.as_view(),
]

实现这一目标的最佳方法是什么?

【问题讨论】:

  • 让我澄清一下。首先,我们向 API-1 发送一个请求,该请求将返回一个 JWT 令牌。那么您只需将返回的令牌传递给 API-2?

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


【解决方案1】:

TokenAuthentication 中所述:

对于客户端进行身份验证,令牌密钥应包含在 Authorization HTTP 标头中。键应以字符串文字 "Token" 为前缀,两个字符串之间用空格分隔。

但不限于前面提到的前缀"Token"

注意:如果你想在头部使用不同的关键字,例如Bearer,只需子类化 TokenAuthentication 并设置关键字类变量。

由于您使用的是JWT 令牌:

需要身份验证的视图将查找具有以下格式的标头:Authorization: Bearer <token>。此设置还可能包含可能的标头类型的列表或元组(例如('Bearer'、'JWT')

所以你可以尝试:

response = requests.get("/someendpoint/list/", headers={"Authorization": "Bearer eyJxxxxxx"})

或者:

response = requests.get("/someendpoint/list/", headers={"Authorization": "JWT eyJxxxxxx"})

确保您已按照here 记录的方式正确设置身份验证类,方法是:

  1. views.py
class ListItems(generics.ListAPIView):
    authentication_classes = [
        # Only list here what you needed
        rest_framework.authentication.TokenAuthentication,
        rest_framework_jwt.authentication.JSONWebTokenAuthentication,
    ]
    ...
  1. 或settings.py
...
REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        # Only list here what you needed
        'rest_framework.authentication.TokenAuthentication',
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
    ],
    ...
}
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-09
    • 2021-08-05
    • 2021-04-29
    • 2017-02-16
    • 2019-11-11
    • 2019-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多