我正在尝试让一个简单的 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()