我遵循了本指南,以便在我的应用中创建帐户关联 https://developers.google.com/actions/identity/google-sign-in#json
我能够验证用户的jwt解码器并发回用户已被授权的响应。然后,根据指南,在下一个请求中,我应该获取用户的配置文件有效负载(json结构中的user.profile.payload),但是下一个请求中缺少该负载。不仅如此,我再次获得用于jwt验证的tokenId。 我认为我在这里想念的是在ambientIntent对象中,但是我不确定,因为我没有看到任何文档,因为我使用asp.net服务器。有些SDK仅包含Java和nodeJS文档
这是为包含令牌id的标志提供的请求
{
"user": {
"locale": "en-US",
"lastSeen": "2019-07-11T14:18:10Z",
"idToken": "<tokenId>",
"userVerificationStatus": "VERIFIED"
},
"conversation": {
"conversationId": "ABwppHH9uZfcKj6pS6A6wItKC1dOXuZJ5oFYt2Og7cqrElSQYC9bv-aV7iQ5FDYaJPp-fa7tQNhc2yS0fw3QBu-M",
"type": "ACTIVE",
"conversationToken": "e0e78f40-a207-49c2-9050-50c6ed526c24"
},
"inputs": [
{
"intent": "actions.intent.SIGN_IN",
"rawInputs": [
{
"inputType": "KEYBOARD"
}
],
"arguments": [
{
"name": "SIGN_IN",
"extension": {
"@type": "type.googleapis.com/google.actions.v2.SignInValue",
"status": "OK"
}
},
{
"name": "text"
}
]
}
],
"surface": {
"capabilities": [
{
"name": "actions.capability.SCREEN_OUTPUT"
},
{
"name": "actions.capability.ACCOUNT_LINKING"
},
{
"name": "actions.capability.AUDIO_OUTPUT"
},
{
"name": "actions.capability.MEDIA_RESPONSE_AUDIO"
},
{
"name": "actions.capability.WEB_BROWSER"
}
]
},
"isInSandbox": true,
"requestType": "SIMULATOR"
}
这是我在验证用户后提供的响应。 我尝试了两个intents actions.intent.TEXT和actions.intent.SIGN_IN尝试,但都没有成功。下一个请求再次提供了user.idToken属性,而不是user.profile(应该包含有效负载)
{
"conversationToken": "b09d915e-6df9-496d-acde-b76858cd95b4",
"expectUserResponse": true,
"expectedInputs": [
{
"inputPrompt": {
"richInitialPrompt": {
"items": [
{
"simpleResponse": {
"textToSpeech": "Hi",
"displayText": "Hi"
}
}
],
"suggestions": []
}
},
"possibleIntents": [
{
"intent": "actions.intent.TEXT",
"inputValueData": {
"@type": "type.googleapis.com/google.actions.v2.SignInValue",
"status": "OK"
}
}
]
}
]
}
答案 0 :(得分:3)
您正在谈论的user.profile
属性是通过JavaScript的Google动作库提供的。它不是您将收到的JSON。但是...
您不需要它,因为基本的个人资料信息(姓名,电子邮件和Google ID)已编码在user.idToken
中。该字符串将根据每个请求发送给您,它只是一个JWT令牌,您可以对其进行验证和解码。该配置文件将在“有效负载”部分中。
我不知道c#,但是https://jwt.io/包含一个库列表,可以为您解码JWT字符串,以便您阅读“有效载荷”。
请记住,您不需要每次都验证令牌(尽管如果操作正确,则价格不菲),但是您可以解码< / em>即可获取所需的信息。
如果您不想对其进行解码,则可以在首次验证时对其进行解码,获取所需的信息,然后将该信息存储在userStorage
字符串中(假设您不希望这样做)更改)。