0

我正在尝试让一个简单的 Flask 应用程序与 Dexcom 的沙盒 API ( 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()
4

0 回答 0