在pythonanywhere上安装后出现OAuth错误

时间:2018-08-28 15:06:39

标签: oauth-2.0 wsgi bottle pythonanywhere fitbit

我在本地使用Bottle开发了一个Python网络应用,并使其(主要)在pythonanywhere上运行。

也就是说,当我尝试对用户进行身份验证(在本地安装中有效)时,出现以下错误:

Redirect_uri mismatch: null. Visit https://dev.fitbit.com/docs/oauth2 for more information on the Fitbit Web API authorization process.

我已经更新了我的fitbit api应用程序设置,并仔细检查了该设置中的redirect_uri与我的应用程序中的内容是否匹配。

看看fitbit文档论坛,看来this could be a percent-encoding issue在...

https://www.fitbit.com/login?disableThirdPartyLogin=true&redirect=%2Foauth2%2Fauthorize%3Fclient_id%XXXXXXXX%26redirect_uri%3Dhttp%253A%252F%252Fexample.com%252Fcallback%26response_type%3Dcode%26scope%3Dactivity%2Bsleep%2Bweight%2Bnutrition%2Bsettings%26state%3D024

应该是...

https://www.fitbit.com/login?disableThirdPartyLogin=true&redirect=%2Foauth2%2Fauthorize%3Fclient_id%XXXXXXXX%26redirect_uri%3Dhttp://example.com/callback%26response_type%3Dcode%26scope%3Dactivity%2Bsleep%2Bweight%2Bnutrition%2Bsettings%26state%3D024

以这种方式建立到授权页面的重定向...

@app.route('/aas/<study_id>')
def hello(study_id):
    '''This is the primary request page that redirects users to the fitbit api for authorization.'''

    authorization_page = f'https://www.fitbit.com/oauth2/authorize' \
                         f'?response_type=code' \
                         f'&client_id={CLIENT_ID}' \
                         f'&redirect_uri={str(REDIRECT_URI)}' \
                         f'&scope={SCOPE}' \
                         f'&state={study_id}'    
    redirect(url=authorization_page)

是否有一种方法可以防止这种编码的发生,如果有问题的话,可以直接查看?我认为这是由wsgi完成的。

任何其他想法/想法都值得赞赏。

1 个答案:

答案 0 :(得分:1)

谢谢大家,

原来我没有在授权代码授予流(oauth握手的第二部分)中传递URI……

POST https://api.fitbit.com/oauth2/token
Authorization: Basic Y2xpZW50X2lkOmNsaWVudCBzZWNyZXQ=
Content-Type: application/x-www-form-urlencoded

client_id=22942C&grant_type=authorization_code&redirect_uri=http%3A%2F%2Fexample.com/callback%2Ffitbit_auth&code=1234567890

我仍然不知道为什么它可以在我的本地服务器上运行而不能在pythonanywhere上运行,但是它是固定的。