繁体   English   中英

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

[英]Get user email from Auth0 AccessToken with google authentication

我正在为我的 React 应用程序使用 Auth0 进行 Google 身份验证。 登录成功地工作,我得到令牌使用接入getTokenSilently中的auth0-SPA-JS 但是此令牌没有用户电子邮件或姓名。

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"
}

如何请求电子邮件和姓名成为令牌的一部分? 我需要将任何参数传递给getTokenSilently吗?

我将使用此令牌来调用 API,我需要电子邮件地址。 我看到的另一种方法是使用作为“子”声明一部分的 ID,但电子邮件要容易得多。

感谢您的帮助。

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

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

来自 Google 的 OpenId Connect 文档 ( https://developers.google.com/identity/protocols/OpenIDConnect )

获取用户个人资料信息

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

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

如果您希望包含用户的电子邮件地址,您可以选择请求 openid 电子邮件范围。 要同时指定个人资料和电子邮件,您可以在身份验证请求 URI 中包含以下参数:

范围=openid%20email%20profile

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

正如你所说,没有办法避免这个额外的调用。

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

例如

function (user, context, callback) {
  context.accessToken["http://mynamespace/user_email"] = user.email;
  callback(null, user, context);
}

查看给定添加到 idtoken 示例的示例

将“电子邮件”添加到范围会起作用

AuthorizationTokenRequest(
          AUTH0_CLIENT_ID,
          AUTH0_REDIRECT_URI,
          issuer: 'https://$AUTH0_DOMAIN',
          scopes: <String>['openid', 'email', 'profile'],
        ),

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM