Jwt 从令牌|@auth0/auth0获取电子邮件

Jwt 从令牌|@auth0/auth0获取电子邮件,jwt,access-token,auth0,Jwt,Access Token,Auth0,我一直在尝试从auth0 js升级到@auth0/auth0 spa js,尽管我无法专心阅读来自令牌的电子邮件,而令牌又是从wait useAuth0()获得的。gettokensilenly() 我使用解密令牌,这是我在有效负载中得到的: { "iss": "https://TENANT_NAME.auth0.com/", "sub": "auth0|SOME_HASH", "aud&quo

我一直在尝试从auth0 js升级到@auth0/auth0 spa js,尽管我无法专心阅读来自令牌的电子邮件,而令牌又是从
wait useAuth0()获得的。gettokensilenly()

我使用解密令牌,这是我在有效负载中得到的:

{
  "iss": "https://TENANT_NAME.auth0.com/",
  "sub": "auth0|SOME_HASH",
  "aud": [
    "https://API_IDENTIFIER",
    "https://TENANT_NAME.auth0.com/userinfo"
  ],
  "iat": 1563699940,
  "exp": 1563786340,
  "azp": "SOME_OTHER_HASH",
  "scope": "openid profile email"
}
当我使用auth0js时,我可以将
范围:“openid email”
添加到
新的auth0.WebAuth({…})
和voilá–我在解密令牌的有效负载中有emailemail\u verified

我相信他们无法回答我的问题,从我的阿波罗配置中的钩子
gettokensilenly()
中检索令牌本身也是一个挑战。但是,我喜欢SPA的重定向实现。请问,您能建议一种适当的方式将电子邮件和电子邮件验证包含在令牌的有效负载中吗

更新

通过阅读,我理解了我从
getTokensilenly()
获得的令牌被称为访问令牌。直到今天,我一直在我所有请求的头中使用ID标记,这可能是一种糟糕的方法:

在符合OIDC的管道中,ID令牌不应用作API令牌

此外,文件还说:

除了用户ID(位于子声明中)之外,令牌不包含有关用户的任何信息

在许多情况下,您可能会发现检索其他用户信息很有用。可以通过使用访问令牌调用/userinfo API端点来实现这一点

我就是这样做的。我已经用我的访问令牌发送了请求,并且神奇地从Auth0的自定义API中获得了一个包含用户配置文件信息的对象


我们走近了,是什么算法将“sub”转换为驻留在Auth0的自定义API中的用户配置文件,我可以为我用ruby编写的后端实现它?

是的,正如您所提到的,ID令牌不应该用作API令牌。它们有不同的用法(并且您不希望您的API令牌太大,因为您在每个请求的头中发送它)

要获取用户电子邮件,您只需获取ID令牌中给定的UserProfile。要实现这一点,只需调用
getUser
,而不是
getTokensilenly

如果您想了解有关用户的更多信息,您有两种获取用户信息的方法:

  • 您可以使用Auth0管理API根据用户id(在id令牌的
    声明中)并使用获取用户信息。在Ruby中,您可以只使用一个基本的HTTP请求

  • 您可以使用规则始终在ID令牌中包含特定字段。例如,您可以在ID令牌中包含
    user\u元数据
    app\u元数据
    。这样,您就可以使用它而无需额外的API调用。要实现这一点,您将需要生成()

  • 将所有
    user\u元数据
    app\u元数据
    添加到ID令牌的示例规则如下:

    函数(用户、上下文、回调){
    const namespace='your_url_namespace_just_for_化妆品但_必需/';
    context.idToken[namespace+'user\u metadata']=user.user\u metadata;
    context.idToken[namespace+'app_metadata']=user.app_metadata;
    回调(null、用户、上下文);
    }
    
    您的ID令牌中将包含该信息,供前端使用

    为了记录在案,更多关于示例的规则