如何使用后端服务器验证 google 家庭用户?
How to authenticate a google home user with the back-end server?
我们正在尝试 link google 家庭应用程序与我们的后端服务器。目前,我们可以使用 google 帐户登录 google 家庭应用程序,并将访问令牌发送到我们自己的 api。我们也可以使用 google 帐户登录我们自己的服务。但是我们如何才能验证是谁从 google 主页发送连接两个帐户的请求。
google 从我们的服务器登录收到的信息。
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)
}
Post 从 google 主页到 webhook 的请求
{
"user":{
"userId":"XXXXXXXXXXXXXXXXXXXXXXXX",
"accessToken":"XXXXXXXXXXXXXXXXXXXXXXXXX",
"locale":"nl-NL",
"lastSeen":"2018-10-15T14:17:23Z",
"userStorage":"{\"data\":{}}"
},
"conversation":{
"conversationId":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"type":"ACTIVE",
"conversationToken":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
},
如果您在对 webhook 的请求中收到 accessToken
,那么这是您的 OAuth2 服务器应该向智能助理发出的访问令牌,以便它可以代表您执行操作。据推测,您会在您的身份验证系统中使用此令牌来识别用户的帐户,但具体的方法取决于您,因为它取决于您使用的 OAuth 服务器。
但是,由于您使用的是 Google 帐户,因此可以使用 Google Sign in for Assistant 大大简化操作。这会给你一个 idToken
而不是它,在解码和验证时,它将包括他们的 Google ID,它应该与你从他们的个人资料中获得的 id
相匹配。
我们正在尝试 link google 家庭应用程序与我们的后端服务器。目前,我们可以使用 google 帐户登录 google 家庭应用程序,并将访问令牌发送到我们自己的 api。我们也可以使用 google 帐户登录我们自己的服务。但是我们如何才能验证是谁从 google 主页发送连接两个帐户的请求。
google 从我们的服务器登录收到的信息。
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)
}
Post 从 google 主页到 webhook 的请求
{
"user":{
"userId":"XXXXXXXXXXXXXXXXXXXXXXXX",
"accessToken":"XXXXXXXXXXXXXXXXXXXXXXXXX",
"locale":"nl-NL",
"lastSeen":"2018-10-15T14:17:23Z",
"userStorage":"{\"data\":{}}"
},
"conversation":{
"conversationId":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"type":"ACTIVE",
"conversationToken":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
},
如果您在对 webhook 的请求中收到 accessToken
,那么这是您的 OAuth2 服务器应该向智能助理发出的访问令牌,以便它可以代表您执行操作。据推测,您会在您的身份验证系统中使用此令牌来识别用户的帐户,但具体的方法取决于您,因为它取决于您使用的 OAuth 服务器。
但是,由于您使用的是 Google 帐户,因此可以使用 Google Sign in for Assistant 大大简化操作。这会给你一个 idToken
而不是它,在解码和验证时,它将包括他们的 Google ID,它应该与你从他们的个人资料中获得的 id
相匹配。