2

我正在使用 Authlib 模块来测试 OAuth2 集成。我制作了一个简单的 Flask 应用程序,并尝试使用 Untappd API ( https://untappd.com/api/docs#authentication ) 进行授权。

遵循 Authlib Flask 模块 ( https://docs.authlib.org/en/latest/client/flask.html ) 的指导方针,我成功地被重定向并获得了授权码。

authorize_redirect()重定向我以在 Untappd 授权我的应用程序后,我批准,将我发送到我的回调 url,并在 url 中使用身份验证代码。

http://localhost:3000/callback?code=1B6D5B8154EC6627748001F&state=GwqinEMqcRDSjfKmNHh

我应该能够下次调用authorize_access_token()以获取令牌,但这就是我得到的:

{'meta': {'http_code': 500, 'error_type': 'param_error', 'error_detail': 'Missing either the client_id, redirect_url, client_secret or code parameter. Please check your request a try again.'}, 'response': []}

我已经在 authlib 的配置中注册了 client_id、redirect_url、client_secret,所以我不知道缺少什么。使用我在 Postman 中测试并成功收到令牌的授权码

  GET  https://untappd.com/oauth/authorize/?client_id=CLIENTID&client_secret=CLIENTSECRET&response_type=code&redirect_url=REDIRECT_URL&code=CODE

{"meta":{"http_code":200},"access_token":"k43l4j3lj43lj43","response":{"access_token":"k43l4j3lj43lj43"}}

那么我的代码有什么问题?:

auth0 = oauth.register(
    'auth0',
    client_id=AUTH0_CLIENT_ID,
    client_secret=AUTH0_CLIENT_SECRET,
    api_base_url=AUTH0_BASE_URL,
    access_token_url=AUTH0_BASE_URL + '/oauth/authorize',
    authorize_url=AUTH0_BASE_URL + '/oauth/authenticate',
)


@auth_blueprint.route('/login')
def login():
    redirect_uri = url_for('.callback', _external=True)
    return auth0.authorize_redirect(redirect_uri)


@auth_blueprint.route('/callback')
def callback():
    token = auth0.authorize_access_token()
    print(token)
    return redirect('/loggedin')

我唯一能想到的是授权代码没有在重定向中传递,但无法调试它。在我看来,Authlib 幕后发生的事情并没有得到很好的记录。

更新 我有一个想法要运行print(auth0.__dict__),看看我是否可以看到缺少什么参数。

{'name': 'auth0', 'client_id': '2226808DCDAF2FA5FFE145A', 'client_secret': '9494F1877AB0D01D9DE6AAF4', 'request_token_url': None, 'request_token_params': None, 'access_token_url': 'https://untappd.com/oauth/authorize', 'access_token_params': None, 'authorize_url': 'https://untappd.com/oauth/authenticate', 'authorize_params': None, 'api_base_url': 'https://untappd.com', 'client_kwargs': {}, 'oauth1_client_cls': None, 'oauth2_client_cls': <class 'authlib.integrations.requests_client.oauth2_session.OAuth2Session'>, 'compliance_fix': None, 'client_auth_methods': None, '_fetch_token': None, '_update_token': None, '_server_metadata_url': None, 'server_metadata': {'refresh_token_url': None, 'refresh_token_params': None}, '_fetch_request_token': None, '_save_request_token': None}

(id 和 secret 不是真实的)我看不到任何不应该存在的东西。

4

1 回答 1

0

我也是从这条路开始的,所以我没有什么可提供的。

但我知道的一件事是 Untappd 对通用 User-Agent 字符串很挑剔。尝试超越它。也许邮递员也做了同样的事情......?

在我的代码中,我添加了这个并且一切正常 oauth.headers["User-Agent"] = "GiveMeBeer"

于 2020-07-25T00:29:15.027 回答