【问题标题】:Get user email from Auth0 AccessToken with google authentication通过 google 身份验证从 Auth0 AccessToken 获取用户电子邮件
【发布时间】:2020-01-07 15:10:40
【问题描述】:

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

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 中获取用户信息。我很想避免这个额外的电话。

【问题讨论】:

  • 您是否获得了 ID 令牌以及令牌响应?

标签: reactjs oauth-2.0 openid-connect auth0


【解决方案1】:

您应该可以通过auth0.getIdTokenClaims() 获取 id 令牌。这将具有用户个人资料。

【讨论】:

    【解决方案2】:

    在作用域中添加“电子邮件”就可以了

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

    【讨论】:

      【解决方案3】:

      来自 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 标准声明中所述。用户可以选择提供或保留某些字段,因此您可能无法获得范围请求访问的每个字段的信息。

      按照您的命名,无法避免这个额外的调用。

      【讨论】:

        【解决方案4】:

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

        例如

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

        查看example of adding to idtoken给出的示例

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-05-01
          • 1970-01-01
          • 2014-01-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-06-25
          • 1970-01-01
          相关资源
          最近更新 更多