代码之家  ›  专栏  ›  技术社区  ›  Outcast

如何在Google和Auth0上取消帐户链接

  •  9
  • Outcast  · 技术社区  · 8 年前

    我正在使用 Actions on Google (在手机上 Google Assistant )通过使用它 Account Linking 我已登录 Auth0 ( 登录窗口 : image )

    但是,我想退出 Auth0 只要我愿意,我就可以从头开始测试整个过程。

    我在中编写了以下源代码 Python 和 Flask 跟随 Auth0 文档库 https://auth0.com/docs/logout )。

    from flask import Flask, render_template, request, jsonify
    import requests
    
    app = Flask(__name__)
    @app.route("/", methods=['GET', 'POST'])
    def index():
    
        session['user'] = 'Poete_Maudit'
    
        data = request.get_json()
    
        if data is not None:
            action = data["queryResult"]["action"]
        else:
            return 'HERE'
    
        # Triggers actions.intent.SIGN_IN which leads to Auth0
        if (action == 'sign'):
    
            return jsonify({"payload": {
                        "google": {
                            "expectUserResponse": True,
                            "isSsml": False,
                            "noInputPrompts": [],
                            "systemIntent": {
                                "data": {
                                    "@type": "type.googleapis.com/google.actions.v2.SignInValueSpec"
                                },
                                "intent": "actions.intent.SIGN_IN"
                            }
                          }
                         }
                        })
        # I have other if statements below which retrieve the access token 
        # and do in general other stuff on Actions on Google app
        # but it is too long to include it here
    
    @app.route('/logout')
    def logout():
        session.clear()
        return redirect('https://project_id.eu.auth0.com/v2/logout?returnTo=http://127.0.0.1:5000')
    
    if __name__== "__main__":
        app.secret_key = os.urandom(24)
        app.run(debug=True)
    

    在我执行了整个登录过程一次之后,我手动(从浏览器)转到 http://127.0.0.1:5000/logout 它成功地将我重定向到 http://127.0.0.1:5000 . 在python控制台上,我得到了:

    127.0.0.1 - - [06/Jun/2018 14:09:04] "GET /logout HTTP/1.1" 302 -
    127.0.0.1 - - [12/Jun/2018 11:03:16] "GET / HTTP/1.1" 200 -
    

    在 Auth0 我正在获取的日志部分 Success Logout ( image )。

    不过,当我重新启动手机上的整个过程时,谷歌助手 登录窗口 不显示,我已再次登录 Auth0 用同样的 accessToken .

    如何通过清除会话和/或上的cookie正确注销 网址:http://127.0.0.1:5000 从而使 Auth0 登录窗口 再次出现?

    附笔。

    1)请记住,目前我正在做这一切 蟒蛇 和 ngrok . 如果我重新启动 恩格罗克 然后会重新出现“登录”窗口,但显然我希望以编程方式执行此操作。

    2)请不要想当然。我可能遗漏了一些非常基本的东西,所以请尽管问我一些非常基本的问题。

    2 回复  |  直到 8 年前
        1
  •  5
  •   Outcast    8 年前

    我已经向Google支持部门发送了一条关于它的消息,得到了以下答案:

    要取消帐户链接,可以使用此链接 ( https://gala-demo.appspot.com )在“现场服务ID”中输入 项目ID并在末尾添加“_dev”(在您的情况下,它将 “dnipro-chatbot-dev”),然后单击“取消链接我的帐户”。

    此外,我问他们我是否可以通过编程(而不仅仅是像上面那样手动)来实现这一点,我得到了以下答案:

    我不确定在Python中是否可以这样做,但是您可以尝试 以下:如果您可以从OAuth发回401状态代码 令牌交换终结点。401会告诉AOG访问令牌 无效,并强制AOG再次启动帐户链接流。 希望这能对你有所帮助。

    总之,在我测试的时候,您当然可以使用上面的链接来断开帐户的链接,而且它工作正常。关于第二个答案,我不确定这是完全可能的,至少在陈述的方式。您不能从auth0以编程方式发送401状态代码。在Auth0上可以做的是将Auth0应用程序的JWT的过期时间设置得非常低(例如60秒),这样会强制撤销访问令牌。但这并不是一个真正的程序解决方案,我还没有测试过它。

        2
  •  2
  •   Nico Sabena    8 年前

    这个 /v2/logout Auth0中的端点是从前端通道(即浏览器)使用的,因此后端应用程序应返回 302 重定向指向的响应 /V2/注销 端点(可以使用 returnTo 参数,如文档中所述,如果要在清除会话后将用户重定向回特定的URL)。

    通过像现在这样发出反向通道请求(服务器到服务器),会话cookie丢失,因此auth0不知道要终止哪个会话。

    还要注意的是 /V2/注销 终结点清除会话 在Auth0中 但您还必须清除应用程序中的会话。如果用烧瓶,看看这些 Flask session.clear examples .

    推荐文章