从 JWT 生成访问令牌

Posted

技术标签:

【中文标题】从 JWT 生成访问令牌【英文标题】:Generate Access Token from JWT 【发布时间】:2019-11-29 23:04:37 【问题描述】:

我正在 Google Cloud 上开发微服务,将登录用户的 JWT 放入其授权请求标头中。在某个地方,我需要从 JWT 生成一个访问令牌——比如用用户的凭据创建一个 Storage 对象。如何从 JWT 令牌生成访问令牌?

【问题讨论】:

您想要什么样的令牌作为访问令牌?从您拥有的 JWT 创建的另一个 JWT 或加密 JWT 并使用加密作为访问令牌?等等。 我需要从 JWT 生成一个“ya29..”令牌。我可以使用它创建 GoogleCredentials 对象的任何用户令牌 我尝试将 "grant_type":"urn:ietf:params:oauth:grant-type:jwt-bearer","assertion": "jwt" 发布到 googleapis.com/oauth2/v4/token ,但它给出了我“找不到 OAuth 客户端”错误 谢谢,我错过了那一步。我创建了一个服务帐户并将其用作发行者。这样做之后,我得到:“客户端未授权使用此方法检索访问令牌,或者客户端未授权任何请求的范围。” .这是否意味着我需要在 Gsuite 上执行这些步骤(如您发送的链接中所述)? @PawelCzuczwara 您提供的 github 链接使用的是另一个令牌端点,而不是 OP 询问的那个。 【参考方案1】:

此错误通常意味着它无法根据令牌中的 iss(uer) 声明找到服务帐户。您是否创建并授权服务帐户并在 JWT 中引用它?

【讨论】:

我发布这个,是为了其他面临同样问题的人。这个链接在这里:jhanley.com/…,用一个代码示例解释了我们如何为使用服务帐户的用户获取访问令牌。虽然,它并不是我想要的,但这似乎是 GCP 的唯一出路。请记住,要使其正常工作,您的服务帐户必须添加到您的 gsuite 域并授权您尝试创建访问令牌的范围。

以上是关于从 JWT 生成访问令牌的主要内容,如果未能解决你的问题,请参考以下文章

从 JWT 令牌中删除角色信息

从 Spring Boot Rest Controller 访问 JWT 令牌

如何从 Keycloak JWT 访问令牌中删除属性?

如何使用 jwt 公钥在 Spring Boot 中验证承载访问令牌

JWT Token 访问 AuthenticatedUser

如何生成包含一些自定义声明的 JWT 访问令牌?