4

非常简单的用例解释了我的问题:鉴于我的应用程序要求输入密码以进行某些交互。现在用户给了我三遍错误的密码。然后,我想重置他的访问权限并强制他重新链接他的帐户。我可以在我的内部数据库中很容易地做到这一点,但我需要一种方法来告诉谷歌他当前使用的令牌不再有效。否则,Google 助理拒绝向我发送现在被拒绝的令牌。

2018-03-01 更新:使用新的内置意图/事件,我还尝试actions_intent_SIGN_IN通过属性发送事件followupEvent,但这只会导致谷歌助手使用GOOGLE_ASSISTANT_WELCOME(使用旧的 oauth 令牌..)调用我的 api,而不是重新启动登录工作流程。


原帖

我有一个带有对话框流的谷歌助手应用程序,它强制用户登录才能使用我的应用程序。最初的 oauth 工作流程有效,我确实在所有 api 调用中都获得了令牌。

现在我想强制用户在某些情况下重新运行帐户链接工作流程。为此,我从内部数据库中删除了 oauth 令牌,并将此响应准确发送给用户,app.askForSignIn()如果您使用的是 sdk,这应该等于调用:https ://github.com/actions-on-google/actions -on-google-nodejs/blob/fe29016d472eeb1d080e2b575236076e9341199e/test/dialogflow-app-test.js#L1827

在此处输入图像描述

但这不起作用。助手不会告诉用户重新运行 oauth 链接工作流,也不会删除它存储的 oauth 令牌。它甚至不使用它的刷新令牌来获取新的访问令牌!

此外,模拟器没有使用我的响应的“语音”属性,而是用“对不起,我没有得到任何响应”来回答。- 虽然我的模拟器配置为说德语。

(我还尝试省略几个可能不需要的参数,例如contextOut属性。这导致请求与官方 sdk 源中所述的请求不同,但也没有给出预期的结果。)

4

2 回答 2

2

处理相同的问题,如果您希望删除存储的 DF 令牌,建议我发送 401 响应。DF 没有隐式的撤销令牌意图。

于 2018-04-05T03:18:23.690 回答
1

可悲的是,Dialogflow 似乎没有使用状态401错误响应来重置令牌。

Google 公开了一个用于撤销访问和刷新令牌的 API。
为此,您必须发送以下请求
https://accounts.google.com/o/oauth2/revoke?token={token}

查看不同的实现

编辑:看来您只需让 Dialogflow 重置其状态。继续在 Dialogflow 控制台上进行编辑似乎可以清除访问令牌。

于 2018-04-11T15:13:55.783 回答