Auth0 - 从 refresh_token 获取 id_token
Auth0 - get id_token from refresh_token
在我们的 7+ 微服务中,我们依赖于 Auth0 id_token
。交换 refresh_token
(POST myapp.auth0.com/oauth/token
) 时,我只返回 access_token
而不是 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
被定义为用户身份验证事件的结果,因此没有用户交互的 "authentication refresh" 不会导致新的 id_token
。用户可能已离开、注销或同时删除了 his/her 帐户。
刷新 id_token
应该通过再次将用户发送到 OpenID Connect 提供商来完成,而不是通过自主使用刷新令牌。
似乎授予刷新令牌是为了 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)
}
}
在我们的 7+ 微服务中,我们依赖于 Auth0 id_token
。交换 refresh_token
(POST myapp.auth0.com/oauth/token
) 时,我只返回 access_token
而不是 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
被定义为用户身份验证事件的结果,因此没有用户交互的 "authentication refresh" 不会导致新的 id_token
。用户可能已离开、注销或同时删除了 his/her 帐户。
刷新 id_token
应该通过再次将用户发送到 OpenID Connect 提供商来完成,而不是通过自主使用刷新令牌。
似乎授予刷新令牌是为了 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)
}
}