我很难使Nokia-Withings OAuth2流与在本地主机上运行的flask应用程序一起工作。我已经确保在/ etc / hosts中,我从回调URL(nokia.velometria.com)重定向到127.0.0.1,以确保所有回调请求都返回到应用程序。
正在发生的事情是,对诺基亚 authorize2 的原始get请求会自动重定向到 account_login ,并且永远不会将带有代码的请求返回到指定的回调URL( nokia.velometria.com/code。
这是我使用的烧瓶代码:
from flask import Flask, request
import requests
import os
app = Flask(__name__)
@app.route("/code", methods=["GET"])
def nokia_code():
"""I expect the url with a code to be sent here"""
return request.get_data()
@app.route("/", methods=["GET", "POST"])
def nokia_callback():
"""OAuth 2.0 - Get your authentication code"""
if request.method == "POST": # just for debugging
app.logger.info("POST request data: {}".format(request.get_data()))
app.logger.info("POST request path: {}".format(request.path))
return "post"
else: # the actual GET request
url = "https://account.health.nokia.com/oauth2_user/authorize2"
client_id = os.getenv("NOKIA_CLIENT_ID", None)
params = {
"response_type": "code",
"client_id": client_id,
"state": "/",
"scope": "user.info",
"redirect_url": "http://nokia.velometria.com/code"
}
r = requests.get(url, params=params)
app.logger.info("url: {}".format(r.url))
app.logger.info("headers: {}".format(r.headers))
app.logger.info("history: {}".format(r.history))
return r.text
if __name__ == "__main__":
app.run(debug=True)
这是我得到的烧瓶日志:
[2018-08-05 22:24:28,136] nokia_callback中的信息:url:https://account.health.nokia.com/oauth2_user/account_login?response_type=code&client_id= ***&state =%2F&scope = user.info&redirect_url = http%3A%2F%2Fnokia.velometria.com% 2Fcode&b = authorize2
[2018-08-05 22:24:28,136]信息位于nokia_callback:标头:{'Date':'Sun,2018 Aug 08 20:24:25 GMT','Server':'Apache','Content -Security-Policy':“框架祖先“自己” https://dashboard.health.nokia.com/”,“ Strict-Transport-Security”:“ max-age = 2592000”,“ X-XSS-Protection”:“ 1”,“ X” -Content-Type-Options”:“ nosniff”,“ Referrer-Policy”:“ strict-origin-when-cross-origin”,“ Vary”:“ Accept-Encoding”,“ Content-Encoding”:“ gzip”, 'X-Frame-Options':'ALLOW-FROM https://dashboard.health.nokia.com/','Content-Length':'2373','Content-Type':'text / html; charset = UTF-8'}
[2018-08-05 22:24:28,136] nokia_callback中的INFO:历史记录:[] 127.0.0.1--[05 / Aug / 2018 22:24:28]“ GET / HTTP / 1.1” 200- 127.0.0.1--[2018年8月5日22:24:28]“ GET / min / g = baseCSS,blockv4CSS&2ef1f384 HTTP / 1.1” 404- 127.0.0.1--[2018年8月5日22:24:28]“ GET / min / g = basev4JS&2ef1f384 HTTP / 1.1” 404- 127.0.0.1--[05 / Aug / 2018 22:24:28]“ GET / min / g = basev4JS&2ef1f384 HTTP / 1.1” 404-
[2018-08-05 22:24:33,318]在nokia_callback中的信息:POST请求数据:b'email = &password = &is_admin = f&csrf_token = *** '
[2018-08-05 22:24:33,318] nokia_callback中的INFO:POST请求路径:/ 127.0.0.1--[05 / Aug / 2018 22:24:33]“ POST / HTTP / 1.1” 200-
请注意,请求url被授权地从authorize2重定向到account_login,然后在烧瓶服务器上使用帐户凭据调用POST-绝对不是我所期望的行为。
关于如何使它起作用的任何想法?
答案 0 :(得分:0)
我有一个类似的问题。基本上https://account.withings.com/oauth2_user/authorize2
网址应由用户在浏览器窗口中打开。 (因此您可以在另一个弹出窗口或iframe中打开它。)该网站将询问应用程序权限,并在需要时要求用户登录。
用户单击您的应用程序有权使用其数据后,该站点将使用参数重定向到您的uri回调。
因此您的http://nokia.velometria.com/
应该监听API给出的请求参数。