Oauth 令牌返回后Google和帐户链接失败的操作

Oauth 令牌返回后Google和帐户链接失败的操作,oauth,oauth-2.0,google-oauth,actions-on-google,google-home,Oauth,Oauth 2.0,Google Oauth,Actions On Google,Google Home,尝试使用OAuth2授权代码流在Web模拟器中测试auth 见: 以及: 如果您已将您的操作设置为需要授权服务的授权,当您尝试访问您的操作时,助手会建议您需要链接您的帐户。 在相同的响应中,模拟器提供了一个用于启动链接过程的URL,请参阅: "debugInfo": { "sharedDebugInfo": [ { "name": "Account Linking Url", "debugInfo": "https://a

尝试使用OAuth2授权代码流在Web模拟器中测试auth

见:

以及:

如果您已将您的操作设置为需要授权服务的授权,当您尝试访问您的操作时,助手会建议您需要链接您的帐户。 在相同的响应中,模拟器提供了一个用于启动链接过程的URL,请参阅:

"debugInfo": {
    "sharedDebugInfo": [
        {
            "name": "Account Linking Url",
            "debugInfo": "https://assistant.google.com/services/auth/handoffs/auth/start?provider=your-google-project-id_dev&scopes=your-scopes&return_url=https://www.google.com/"
        }
    ]
}
调用此URL(粘贴到浏览器中)将引导您通过OAuth2流,假设所需的用户操作成功,Google将使用流中提供的授权代码调用您的令牌端点

但后来我发现:

result_code=FAILURE&result_message=Account+linking+failed

这一切似乎都在我这边起作用,但谷歌返回了一个失败。

在我的例子中,我的令牌端点返回了我的标准令牌响应对象,其中包括一个访问令牌、一个刷新令牌、一个过期令牌,一个会话\u状态和另一个令牌,该令牌不需要用于此目的,但对我的令牌响应来说是标准的

当我在谷歌操场上测试同样的反应时,结果很好:

但使用助手URL时并非如此:

其原因是助手不喜欢响应对象中的多余属性

我尚未完全确定什么是允许的,什么是不允许的,但到目前为止,您可以:

{
    "token_type": "Bearer",
    "access_token: "xxx",
    "refresh_token": "yyy",
    "expires_in": "zzz"
}
有了这些,我现在得到了:

result_code=SUCCESS

我被同样的问题困住了。您确定这是因为响应对象中有额外的字段吗?在我的例子中,我使用keydape实现授权代码流。我想不出通过丢弃额外信息来修改响应的方法。@iwekesi在我的例子中,额外字段肯定是问题所在,如果您的授权流在操场(请参见答案)而不是在助手中工作,那么这可能是您的问题,正如您所说的,这正是问题所在!非常感谢您了解并让我们知道。我不太好奇为什么谷歌不能忽略“多余的属性”。这看起来很有趣。我和谷歌的一位开发者谈过这件事,他说他们正在努力替换这个身份验证流程背后的系统。