簡體   English   中英

Flask Rest API - 如何在 python 請求中使用 Bearer API 令牌

[英]Flask Rest API - How to use Bearer API token in python requests

我在 Flask 中開發了一個 API 並使用基本身份驗證令牌。 當我用 curl 測試這個 API 時,承載令牌被接受並且 API 正在工作。 但是在 python 請求中使用時,它顯示 401 錯誤。

用於 Flask API 的 Python 代碼:

@app.route('/api/resource')
@auth.login_required
def get_resource():
    return 

jsonify({'data': '你好,%s!' % g.user.username.title()})

使用 curl 進行測試工作正常:>

curl -u eyJhbGciOiJIUzI1NsdfCI6MTUzMDc5MDIzNCwiZXhwIjoxNT
   MwNzkwODM0fQ.eyJpZCsf.jKiafmv-qrvAxVo7UKQuohS2vkF-9scpuqsKRuw:sp -i -X GET 
   http://127.0.0.1:5000/api/resource
   HTTP/1.0 200 OK
   Content-Type: application/json
Content-Length: 32
Server: Werkzeug/0.14.1 Python/3.6.4
Date: Thu, 05 Jul 2018 11:33:22 GMT
{  "data": "Hello, FlaskAPI!"}

使用 API 的 Python 代碼:

import requests
url = "http://127.0.0.1:5000/api/resource"
headers = {
    'Content-Type': "application/json",
    'Authorization': "Bearer eyJhbGciOiJIUzI1NiIsImlhsfsdfsdzNCwiZXhwIjoxNTMwNzksdfsdsdRF.eyJpZCI6MX0.YhZvjKiafmv-qrvAxVo7UKQuohS2vkF-9scpuqsKRuw"
    }

response = requests.request("GET", url, headers=headers)

print(response.text)

它顯示錯誤:未經授權的訪問 401

如何使用來自 Python 或郵遞員的 curl 中使用的 Bearer 令牌?

提前致謝!

如果您希望我們使用 Bearer 令牌,請查看 Miguel Grinberg 的應用程序編程接口並向下滾動到“用戶模型中的令牌”。 然而,整件事值得一讀。

另一篇文章是 Real Pythons 的Flask 基於令牌的身份驗證

這兩者都將有助於理解和實施不記名令牌。

curl -u不使用不記名令牌,而是使用BasicAuth (通過登錄名和密碼)。 嘗試這個:

url = 'http://%s:%s@127.0.0.1:5000/api/resource' % (
    'eyJhbGciOiJIUzI1NiIsImlhsfsdfsdzNCwiZXhwIjoxNTMwNzksdfsdsdRF.eyJpZCI6MX0.YhZvjKiafmv-qrvAxVo7UKQuohS2vkF-9scpuqsKRuw',
    'sp',
)
headers = {
    'Content-Type': 'application/json',
}
response = requests.request("GET", url, headers=headers)

但推薦的方法是傳遞在 header 中編碼的登錄名和密碼:

import base64
url = 'http://127.0.0.1:5000/api/resource'
headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Basic %s' % base64.b64encode('%s:%s' % (
            'eyJhbGciOiJIUzI1NiIsImlhsfsdfsdzNCwiZXhwIjoxNTMwNzksdfsdsdRF.eyJpZCI6MX0.YhZvjKiafmv-qrvAxVo7UKQuohS2vkF-9scpuqsKRuw',
            'sp',
        ),
    ),
}
response = requests.request("GET", url, headers=headers)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM