Reactjs 使用google身份验证从Auth0 AccessToken获取用户电子邮件

Reactjs 使用google身份验证从Auth0 AccessToken获取用户电子邮件,reactjs,oauth-2.0,openid-connect,auth0,Reactjs,Oauth 2.0,Openid Connect,Auth0,我正在使用Auth0对我的React应用程序进行Google身份验证。登录成功,我正在使用的getTokensilenly获取访问令牌。但此令牌没有用户电子邮件或名称 const { getTokenSilently } = useAuth0(); getTokenSilently().then((t:any) => { //t is the token }); 它有以下主张: { "iss": "https://testauth0.auth0.com/", "sub":

我正在使用Auth0对我的React应用程序进行Google身份验证。登录成功,我正在使用的
getTokensilenly
获取访问令牌。但此令牌没有用户电子邮件或名称

const { getTokenSilently } = useAuth0();
getTokenSilently().then((t:any) => {
    //t is the token
});
它有以下主张:

{
  "iss": "https://testauth0.auth0.com/",
  "sub": "google-oauth2|<id>",
  "aud": [
    "test1",
    "https://testauth0.auth0.com/userinfo"
  ],
  "iat": 1567615944,
  "exp": 1567702344,
  "azp": "<>",
  "scope": "openid profile email"
}
{
“国际空间站”:https://testauth0.auth0.com/",
“sub”:“google-oauth2 |”,
“澳元”:[
“测试1”,
"https://testauth0.auth0.com/userinfo"
],
“iat”:1567615944,
“经验”:1567702344,
“azp”:“,
“范围”:“openid配置文件电子邮件”
}
我如何请求将电子邮件和姓名作为令牌的一部分?我是否需要将任何参数传递给
getTokensilenly

我将使用此令牌调用API,我需要电子邮件地址。我看到的另一种选择是使用id,这是“sub”声明的一部分,但电子邮件要简单得多

谢谢你的帮助

更新
我能够使用userinfo端点(aud声明的一部分)在API中获取用户信息。我希望避免这个额外的呼叫。

来自Google的OpenId Connect文档()

获取用户配置文件信息

要获取有关用户的其他配置文件信息,可以使用 访问令牌(应用程序在 身份验证流)和OpenID连接标准:

要符合OpenID,您必须在身份验证请求中包含OpenID配置文件范围

如果希望包含用户的电子邮件地址,可以选择请求openid电子邮件范围。指定纵断面和纵断面的步骤 电子邮件,您可以在身份验证中包含以下参数 请求URI:

范围=openid%20电子邮件%20配置文件

将您的访问令牌添加到授权标头,并向userinfo端点发出HTTPS GET请求,您应该使用密钥userinfo_端点从发现文档中检索该请求。响应包括有关用户的信息,如OpenID Connect标准声明中所述。用户可以选择提供或保留某些字段,因此您可能无法获得作用域请求访问的每个字段的信息


无法避免您所说的这个额外调用。

您应该能够通过
auth0.getIdTokenClaims()
获取id令牌。这将具有用户配置文件。

添加到的答案中,我们需要首先在声明中添加所需的信息,在本例中,添加到
accesstoken
。 这可以使用规则来完成

e、 g

查看给出的示例

将“电子邮件”添加到范围中即可
AuthorizationTokenRequest(
AUTH0\u客户端\u ID,
AUTH0\u重定向\u URI,
发卡机构:“https://$AUTH0\u域”,
作用域:['openid','email','profile'],
),

您是否在令牌响应中获得ID令牌?
function (user, context, callback) {
  context.accessToken["http://mynamespace/user_email"] = user.email;
  callback(null, user, context);
}
AuthorizationTokenRequest(
          AUTH0_CLIENT_ID,
          AUTH0_REDIRECT_URI,
          issuer: 'https://$AUTH0_DOMAIN',
          scopes: <String>['openid', 'email', 'profile'],
        ),