Dexcom API Oauth2 не работает при обратном вызове - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь получить простое приложение 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()
...