0

在我们的 7+ 微服务中,我们依赖 Auth0 id_token。交换 a refresh_token( POST myapp.auth0.com/oauth/token) 时,我只得到 anaccess_token而不是 a id_token

如何使用 Auth0 的 API交换refresh_token一个?id_token

4

2 回答 2

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. 同时,用户可能已经离开、注销或他/她的帐户被删除。

刷新 anid_token应该通过再次将用户发送到 OpenID Connect Provider 来完成,而不是通过自主使用刷新令牌来完成。

于 2017-03-06T15:57:10.220 回答
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)
  }
}
于 2017-03-06T18:56:42.013 回答