Reactjs 使用google身份验证从Auth0 AccessToken获取用户电子邮件
我正在使用Auth0对我的React应用程序进行Google身份验证。登录成功,我正在使用的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":
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'],
),