Я пытаюсь получить простое приложение Flask, работающее с API песочницы Dexcom (https://developer.dexcom.com). У меня проблемы с авторизацией через OAuth2.
Я зарегистрировал свое приложение на их веб-сайте и у меня есть client_id и client_secret. Я также установил обратный вызов на http://127.0.0.1: 5000 / authorize
Приложение может перенаправлять на страницу авторизации Dexcom. Проблема заключается в том, что после нажатия кнопки авторизации приложение вылетает при обратном вызове с внутренней ошибкой сервера. Однако код авторизации отображается в URL-адресе браузера. Ниже показано, что показано в терминале.
authlib.integrations.base_client.errors.OAuthError: invalid_client: invalid_client
В отладчике браузера я не вижу запроса с кодом авторизации и client_secret.
Ниже приведен код.
from flask import Flask, url_for, redirect, session
from authlib.integrations.flask_client import OAuth
import os
app = Flask(__name__)
app.secret_key='something_random_123'
oauth = OAuth(app)
dexcom = oauth.register(
name='dexcom',
client_id='xxxxxxxxxxxxxxxxxxxx',
client_secret='xxxxxxxxxxxxxxxxx',
access_token_url='https://sandbox-api.dexcom.com/v2/oauth2/token',
acess_token_params=None,
authorize_url='https://sandbox-api.dexcom.com/v2/oauth2/login',
authorize_params=None,
api_base_url='https://sandbox-api.dexcom.com/v2/oauth2/',
client_kwargs={'scope':'offline_access'}
)
@app.route('/')
def hello():
return 'Hello'
@app.route('/login')
def login():
dexcom = oauth.create_client('dexcom')
redirect_uri = url_for('authorize', _external=True)
return dexcom.authorize_redirect(redirect_uri)
@app.route('/authorize')
def authorize():
dexcom = oauth.create_client('dexcom')
token = dexcom.authorize_access_token() # CRASHES HERE
return redirect('/authorized')
@app.route('/authorized')
def authorized():
return 'Successfully authorized'
if __name__ == '__main__':
os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = "1"
app.run()