在我们的7 微服务中,我们依赖于auth0 id_token
。交换refresh_token
(POST myapp.auth0.com/oauth/token
)时,我只能恢复access_token
,而不是id_token
。
如何将refresh_token
与Auth0的API交换为id_token
?
从技术上讲,refresh_token
授予类型是OAuth 2.0的一部分,id_token
是OpenID Connect的一部分,这是构建在OAuth 2.0顶部的身份协议。
refresh_token
授予类型OAuth 2.0允许更新访问令牌(仅)。OpenID Connect并没有定义其他行为,这是有充分理由的:id_token
的定义是用户身份验证事件的结果,而没有用户互动的"身份验证刷新"不能导致新的id_token
。用户可能已经离开,登录或他/她的帐户在此期间已删除。
刷新id_token
应该通过再次将用户发送到OpenID Connect Provider而不是通过自动使用刷新令牌来完成。
看起来,刷新令牌授予是Auth0的新API授权功能。我正在寻找的终点是/delegation
。
示例node.js代码:
const tokenClient = axios.create({
baseURL: `https://${env.AUTH0_DOMAIN}`,
headers: {
'content-type': 'application/json'
}
})
const refreshTokenClient = {
getAccessToken: (refreshToken) => {
// The official Node.js SDK for Auth0 does not
// support this it would seem (it forces passing id_token)
return tokenClient.post('/delegation', {
client_id: env.AUTH0_CLIENT_ID,
target: env.AUTH0_CLIENT_ID,
grant_type: 'urn:ietf:params:oauth:grant-type:jwt-bearer',
refresh_token: refreshToken,
scope: 'openid',
api_type: 'auth0'
}).then(r => r.data)
}
}