我已经集成了auth0以使用https://auth0.auth0.com/
在我的Google Assistant应用程序中对用户进行身份验证帐户关联正常。在请求中将帐户链接到助手后,我收到了一个访问令牌,如下所示:
{
"responseId": "............",
"queryResult": {
"queryText": "GOOGLE_ASSISTANT_WELCOME",
"action": "input.welcome",
"parameters": {
},
"allRequiredParamsPresent": true,
"fulfillmentText": "Hi! How are you doing?",
"fulfillmentMessages": [
{
"text": {
"text": [
"Hi! How are you doing?"
]
}
}
],
"outputContexts": [
.................
],
"intent": {
"name": "...........",
"displayName": "Default Welcome Intent"
},
"intentDetectionConfidence": 1,
"languageCode": "en"
},
"originalDetectIntentRequest": {
"source": "google",
"version": "2",
"payload": {
"user": {
"accessToken": "w8S-ffdFLBCiddyxfsFxKPp3y4FJJoLD2",
"locale": "en-US",
"lastSeen": "2019-08-05T12:54:38Z",
"userVerificationStatus": "VERIFIED"
},
"conversation": {
"conversationId": "ABwppHHTjRvYEzK57U3fKGC-nomnMOTUL5l3rtt9rF2_kXxwV-UwKquki278m4FwcWdM0hQ-48zVZyhCvLw",
"type": "NEW"
},
"inputs": [
{
"intent": "actions.intent.MAIN",
"rawInputs": [
{
"inputType": "KEYBOARD",
"query": "Talk to my device"
}
]
}
]
"session": "projects/quizeapp-8a899/agent/sessions/ABwppHHTjRvYEzK57U3fKGC-nomnMOTUL5l3rtt9rF2_kXxwV-UwKquki278m4FwcWdM0hQ-48zVZyhCvLw"
}
有效载荷中只有一个访问令牌
"user": {
"accessToken": "w8S-ffdFLBCiddyxfsFxKPp3y4FJJoLD2",
"locale": "en-US",
"lastSeen": "2019-08-05T12:54:38Z",
"userVerificationStatus": "VERIFIED"
}
我需要从此访问令牌中提取登录的用户电子邮件ID。
有人知道我该如何实现吗?
答案 0 :(得分:0)
要从Auth0获取登录用户的信息,我们可以使用Auth0- https:// {YOUR_DOMAIN} / userinfo 提供的已定义端点。将域替换为您在Auth0设置中提到的域。 请参阅此link以获取更多信息。
答案 1 :(得分:0)
首先,您收到的访问令牌不是JWT令牌。这是一个不透明的令牌。
如果您从Auth0获得的访问令牌不是JWT,而是一个不透明的字符串(如kPoPMRYrCEoYO6s5),则表示访问令牌不是作为您的自定义API发出的。当为您的API请求令牌时,请确保在授权或令牌请求中使用受众参数,并将API标识符作为参数值。 https://auth0.com/docs/tokens/reference/access-token/access-token-formats
第二,访问令牌不包含电子邮件声明。但是您可以使用auth0规则在令牌中包含自定义声明。 https://auth0.com/docs/api-auth/tutorials/adoption/scope-custom-claims#custom-claims
但是,如果您要在范围内请求电子邮件,则应将其添加到ID TOKEN中。因此,可以通过调用/userinfo端点从前端或后端重试用户配置文件。