在我们的7+微服务中,我们依赖于Auth0 id_token
。在交换refresh_token
(POST myapp.auth0.com/oauth/token
)时,我只返回access_token
而不是id_token
。
如何使用Auth0的API与refresh_token
交换id_token
?
答案 0 :(得分:1)
从技术上讲,refresh_token
授权类型是OAuth 2.0的一部分,id_token
是OpenID Connect的一部分,OpenID Connect是建立在OAuth 2.0之上的身份协议。
OAuth 2.0的refresh_token
授权类型允许续订访问令牌(仅限)。 OpenID Connect没有定义除此之外的其他行为,原因很简单:id_token
被定义为用户身份验证事件和"身份验证刷新"的结果。没有用户交互,因此不会产生新的id_token
。用户可能在同一时间内离开,退出或删除了他/她的帐户。
刷新id_token
应该通过再次将用户发送到OpenID Connect Provider来完成,而不是通过自动使用刷新令牌来完成。
答案 1 :(得分:0)
刷新令牌授权似乎是针对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)
}
}