诺基亚Withings Oauth2获取验证码

时间:2018-08-05 20:40:08

标签: withings

我很难使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-绝对不是我所期望的行为。

关于如何使它起作用的任何想法?

1 个答案:

答案 0 :(得分:0)

我有一个类似的问题。基本上https://account.withings.com/oauth2_user/authorize2网址应由用户在浏览器窗口中打开。 (因此您可以在另一个弹出窗口或iframe中打开它。)该网站将询问应用程序权限,并在需要时要求用户登录。

用户单击您的应用程序有权使用其数据后,该站点将使用参数重定向到您的uri回调。

因此您的http://nokia.velometria.com/应该监听API给出的请求参数。