在我们的 7+ 微服务中,我们依赖 Auth0 id_token
。交换 a refresh_token
( POST myapp.auth0.com/oauth/token
) 时,我只得到 anaccess_token
而不是 a id_token
。
如何使用 Auth0 的 API交换refresh_token
一个?id_token
在我们的 7+ 微服务中,我们依赖 Auth0 id_token
。交换 a refresh_token
( POST myapp.auth0.com/oauth/token
) 时,我只得到 anaccess_token
而不是 a id_token
。
如何使用 Auth0 的 API交换refresh_token
一个?id_token
从技术上讲,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
. 同时,用户可能已经离开、注销或他/她的帐户被删除。
刷新 anid_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)
}
}