oauth-2.0 - 如何使用后端服务器对 google home 用户进行身份验证?
问题描述
我们正在尝试将 google home 应用程序与我们的后端服务器链接。目前我们可以使用 google 帐户登录 google home 应用并将访问令牌发送到我们自己的 api。我们也可以使用谷歌帐户登录我们自己的服务。但是我们如何才能验证是谁从 google home 发送请求以连接两个帐户。
谷歌登录从我们的服务器收到的信息。
object(Google_Service_Oauth2_Userinfoplus)#48 (14) {
["internal_gapi_mappings":protected]=>array(3) {
["familyName"]=>string(11) "family_name"
["givenName"]=>string(10) "given_name"
["verifiedEmail"]=>string(14) "verified_email"
}
["email"]=>NULL
["familyName"]=>string(6) "familyname"
["gender"]=>string(4) "male"
["givenName"]=>string(7) "givenname"
["hd"]=>NULL
["id"]=>string(21) "XXXXXXXXXXXXXXXXXX"
["link"]=>string(45) "https://plus.google.com/XXXXXXXXXXXXXXXXXXXX"
["locale"]=>string(2) "nl"
["name"]=>string(14) "firstname lastname"
["picture"]=>string(92) ""
["verifiedEmail"]=>NULL
["modelData":protected]=>array(2) {
["given_name"]=>string(7) ""
["family_name"]=>string(6) ""
}
["processed":protected]=>array(0) {
}
}
array(6) {
["access_token"]=>string(140) "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
["expires_in"]=>int(3599)
["scope"]=>string(206) "https://www.googleapis.com/auth/userinfo.profile
https://www.googleapis.com/auth/plus.profile.language.read
https://www.googleapis.com/auth/plus.me
https://www.googleapis.com/auth/plus.profile.agerange.read"
["token_type"]=>string(6) "Bearer"
["id_token"]=>string(1085) "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
["created"]=>int(1534615815)
}
将来自 google home 的请求发布到 webhook
{
"user":{
"userId":"XXXXXXXXXXXXXXXXXXXXXXXX",
"accessToken":"XXXXXXXXXXXXXXXXXXXXXXXXX",
"locale":"nl-NL",
"lastSeen":"2018-10-15T14:17:23Z",
"userStorage":"{\"data\":{}}"
},
"conversation":{
"conversationId":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"type":"ACTIVE",
"conversationToken":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
},
解决方案
如果您收到accessToken
对 Webhook 的请求,那么这是您的 OAuth2 服务器应该已向 Assistant 发出的访问令牌,以便它可以代表您执行操作。据推测,您将在您的身份验证系统中使用此令牌来识别用户的帐户,但这样做的确切方法取决于您,因为它取决于您使用的 OAuth 服务器。
但是,由于您使用的是 Google 帐户,因此您可以使用Google 登录助手大大简化事情。这将为您提供一个idToken
,当解码和验证时,它将包含他们的 Google ID,该 ID 应该与id
您从他们的个人资料中获得的相匹配。
推荐阅读
- python - 按下一个键会创建一个循环,直到您按下另一个键
- function - Haskell Recursion - 如何使用原始值调用另一个函数但只调用一次
- python - 如何使用 Matplot.lib 在动画图中使用图像而不是标记
- javascript - 使用 eslint-typescript 和 Express 出现任何值错误时不安全的成员访问 .body
- git - 如何解决“推送”问题?
- command - SCP 命令在空手道项目中不起作用 - 它引发命令错误:无法运行程序 scp.exe:CreateProcess 错误 = 2
- oracle - 在 Oracle 中调用以 $ 字符开头的值
- linux - 使用 cut 组合 csv 文件以选择一列并粘贴以组合文件
- python - 如何在 Django Rest Framework 中为基于函数的视图添加过滤
- ios - 过多的脏内存