如何取消 Google 上的操作和 Auth0 之间的帐户关联



我正在使用Actions on Google(在移动电话Google Assistant上(,并且通过使用其Account Linking我已登录Auth0(登录窗口: 图像(。

但是,我想随时从Auth0注销,以便我可以从头开始测试整个过程。

我按照Auth0文档 (https://auth0.com/docs/logout( 编写了以下源代码,PythonFlask

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(图像(。

但是,当我在手机上重新启动整个过程时,再次出现登录窗口,并且我已经使用相同的accessToken登录Auth0

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

附言

1(请记住,现在我正在Pythonngrok做这一切。如果我重新启动ngrok会话,则登录窗口将重新出现,但显然我想以编程方式执行此操作。

2(请不要认为任何事情是理所当然的。我可能在我正在做的事情中遗漏了一些非常基本的东西,所以请随时问我关于这个的非常基本的问题。

我已经向Google支持发送了一条消息,并得到了以下答案:

要取消关联您的帐户,您可以使用此链接 (https://gala-demo.appspot.com(,在"服务 ID"字段中输入 项目 ID 并在末尾添加"_dev"(在您的情况下,它将是 "第聂伯罗-Chatbot_dev"(,然后点击取消关联我的帐户。

此外,我问他们我是否可以以编程方式执行此操作(而不是如上所述仅手动执行此操作(,我得到了以下答案:

我不确定这是否可以在 Python 中完成,但您可以尝试 以下: 如果可以从 oauth 发回 401 状态代码 令牌交换终结点。401 将告诉 AoG 访问令牌 无效,强制 AoG 重新发起账号关联流程。 希望这能帮助你。

总之,您当然可以使用上面的链接取消链接帐户,因为我对其进行了测试,并且效果很好。关于第二个答案,我不确定这是否完全可能,至少在它所说的方式上是可能的。您不能真正以编程方式从 Auth0 发送 401 状态代码。您可以在 Auth0 上执行的操作是将 Auth0 应用程序的 JWT 的过期时间设置得非常低(例如 60 秒(,并以这种方式强制撤销访问令牌。但这又不是一个真正的编程解决方案,我还没有测试过它。

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

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

另请注意,/v2/logout终结点会清除Auth0 中的会话,但您还必须清除应用程序中的会话。如果使用 Flask,请查看这些 Flask 会话。清晰的示例。

最新更新