Поток кода авторизации Flask OAuth 2.0 Недопустимый токен авторизации с Fitbit API

#python #flask #oauth-2.0 #fitbit #flask-dance

#python #flask #oauth-2.0 #fitbit #flask-танец

Вопрос:

Я пытался использовать OAuth2ConsumerBlueprint от Flask-dance для отправки запросов к API Fitbit. До сих пор мне удалось открыть страницу авторизации в моем приложении Flask, но я еще не смог перенаправить на страницу, где я могу просмотреть данные.

В браузере, когда я пытаюсь сделать запрос, я получаю результат ответа CURL {"errors":[{"errorType":"system","fieldName":"n/a","message":"Authorization Error: Invalid authorization token type"}],"success":false}

Моя цель сейчас — просто иметь возможность просматривать панель управления пользователя fitbit в моем приложении через API, отправив запрос через приложение на «https://api.fitbit.com/1/user/-/profile.json »

Пока это мой код. Если кто-нибудь может дать некоторые рекомендации относительно того, где я ошибаюсь с потоком кода авторизации Oauth2.0, flask или fitbit api, я был бы очень признателен.

 from flask import Flask, redirect, url_for, render_template
from flask_dance import OAuth2ConsumerBlueprint

import os
os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1'


CLIENT_ID = 'CLIENT_ID'  # OAuth 2.0 Client ID
CLIENT_SECRET = CLIENT_SECRET'
scope = ["activity",
         "nutrition",
         "heartrate",
         "location",
         "nutrition",
         "profile",
         "settings",
         "sleep",
         "social",
         "weight",
         ]

# Flask OAuth2 Custom Blueprint for Fitbit API
app = Flask(__name__)
fitbit_blueprint = OAuth2ConsumerBlueprint(
    "fitbit-api", __name__,
    client_id=CLIENT_ID,
    client_secret=CLIENT_SECRET,
    base_url="https://www.fitbit.com",
    token_url="https://api.fitbit.com/oauth2/token",
    authorization_url="https://www.fitbit.com/oauth2/authorize",
    scope=scope
)
app.register_blueprint(fitbit_blueprint, url_prefix="/login")
app.secret_key = "supersecret"  # Replace this

app.token = fitbit_blueprint.token
print(app.token)


@app.route("/")
def index():
    #return redirect(url_for("fitbit-api.login"))
    return render_template('index.html')


@app.route("/success")
def access():
    return "Success"


@app.route('/login')
def login():
    return redirect(url_for("fitbit-api.login"))


# Redirect URI = http://127.0.0.1:
if __name__ == '__main__':
    app.run(host="localhost", port=5000, debug=True) 

Ответ №1:

Вы не можете получить доступ к ресурсу (профилю пользователя) до получения авторизации от fitbit. После авторизации вам нужно будет обменять свой код авторизации на пару токенов и сохранить токены, а именно Access Token и Refresh Token — где-нибудь в вашем коде.

Возможность доступа и прохождения страницы авторизации не означает, что вы авторизованы. Вы можете проверить, завершена ли ваша авторизация в вашем профиле fitbit: откройте свой профиль Fitbit -> Моя панель управления -> Настройки. На левой панели выберите Приложения. Там вы должны увидеть список авторизованных приложений: если вы этого не сделаете, вы еще не изменили свой код авторизации с помощью пары токенов!

Только после этого вы сможете отправлять запросы к конечной точке профиля пользователя, и в этом случае вам необходимо создать http-сообщение с вашим действительным сохраненным токеном доступа в его заголовке, как в https://dev.fitbit.com/build/reference/web-api/oauth2/#making-requests .