帐户与Google上的操作相关联

时间:2017-10-12 09:35:03

标签: oauth-2.0 actions-on-google

我在Google上的操作中遇到有关帐户关联的问题:

我可以对用户进行身份验证并访问他的电子邮件地址和用户名,但是在此之后如何将用户重定向回Google助手并关闭他经过身份验证的浏览器?

任何帮助将不胜感激!

更新:嘿囚犯非常感谢。 我做了你说的,是的,现在它重定向到google.com,但是当我在模拟器中测试时没有result_code = SUCCESS。

链接是:

https://www.google.co.in/?gws_rd=cr&dcr=0&ei=z77fWbjQGIXxvATs_oqwBA

现在,如果我再次打电话给...,它会显示您关联帐户所需的消息!

在设备中,浏览器会自动关闭并显示SIGNING_IN,但是当我输入意图时,它无法识别。

如果你能指出我正确的方向,那将是很棒的! (我不确定,但我可能会在你提到的令牌交换阶段,但我不知道如何继续!)

更新2:根据要求,我关注的整个流程: 这是我从debugInfo收到的URL:

https://assistant.google.com/services/auth/handoffs/auth/start?account_name=cha***@gmail.com&provider=***_dev&scopes=email&return_url=https://www.google.com/

当我在浏览器中粘贴此请求时,我在授权端点收到的请求是:

ImmutableMultiDict([
  ('response_type', 'code'), 
  ('client_id', ****.apps.googleusercontent.com'), 
  ('redirect_uri', 'https://oauth-redirect.googleusercontent.com/r/****'), 
  ('scope', 'email'), 
  ('state', ' CtcCQUxWM2ROU3hNMjl4LUItVXhQSGd4THRMLU4yNExnb3lYbGRKQnQwa3NwTVFva19NUWpYNE5jNGJURzIyZFN3RDBXd2d4enFGVWJGb0Q0ZW1vaS1OaFdkaHdhb05HZ2xlWTR6SllKVlRWYktwd09faklyUTVheFhQbGw2dmVKYzVFTk05N3B1QkxaZG41RVdHN0wyTktvRFdCYzFPVFBzM1dQUlFtN2RmM1VtRU4****(state)')
])

我发回的响应(redirect_url):

https://accounts.google.com/o/oauth2/v2/auth?scope=email&response_type=code&redirect_uri=https%3A%2F%2F******.herokuapp.com%2Fcallback%2Fgoogle&client_id=****.apps.googleusercontent.com

当它再次到达我的端点时,请求参数为:

ImmutableMultiDict([
  ('code', '4/***********')
])

现在我可以访问电子邮件地址和其他详细信息

我从这里重定向的网址:

https://oauth-redirect.googleusercontent.com/r/****?code=abcdefgh&state=CtcCQUxWM2ROU3hNMjl4LUItVXhQSGd4THRMLU4yNExnb3lYbGRKQnQwa3NwTVFva19NUWpYNE5jNGJURzIyZFN3RDBXd2d4enFGVWJGb0Q0ZW1vaS1OaFdkaHdhb05HZ2xlWTR6SllKVlRWYktwd09faklyUTVheFhQbGw2dmVKYzVFTk05N3B1QkxaZG41RVdHN0wyTktvRFdCYzFPVFBzM1dQUlFtN2RmM1VtRU4****(state)

这会将我重定向到:

https://www.google.co.in/?gws_rd=cr&dcr=0&ei=5c_fWdfKNYndvASO7o6ACA

编辑3:我检查了网络日志:

result_code=FAILURE&result_message=Account+linking+failed

我还在AoG中添加了/ token / google作为令牌网址。它在heroku中被检测到但是我从未在我的代码中收到此请求。

注意:我正在使用python flask并在heroku上托管我的应用程序

1 个答案:

答案 0 :(得分:3)

对用户进行身份验证后,您需要将临时身份验证代码返回给Google。之后,谷歌将交换此授权码以获取访问令牌和刷新令牌,但您还没有。重要的是,这段代码必须是唯一的,以后,您将能够识别它的用户。该代码应在有限的时间内有效 - 10分钟是一个普遍接受的时间范围。

在Google作为登录过程发送给您的请求中,他们提供了redirect_uristate作为参数。您需要在回复中使用这些内容。 (state可以是任何东西 - 你不应该关心它是什么,你只需要通过重定向将其发回。它的目的是通过防止重放攻击来提高安全性。)

验证redirect_uri是否具有表单

https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID

YOUR_PROJECT_ID是......你猜对了,你的项目的ID。您可以在云控制台中找到它。

然后,您将使用一些其他参数将用户重定向到此网址:

https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID?code=AUTHORIZATION_CODE&state=STATE_STRING

YOUR_PROJECT_ID如上所述,AUTHORIZATION_CODE是您生成的代码,STATE_STRING是您在state参数中发送的import GoogleTagManager from '../components/google-tag-manager'参数的值请求。

有关详情,请参阅https://developers.google.com/actions/identity/oauth2-code-flow#handle_user_sign-in