我有一个 Micronaut 微服务,它通过本指南中的JsonWebTokens (JWT) 处理身份验证。
现在我想扩展这段代码。我的应用程序中的用户有一些额外的属性,例如电子邮件、地址、teamId 等。我在数据库中有所有用户。
我如何在后端控制器方法中知道哪个用户对应于客户端发送的 JWT?
该指南包含 Micronaut REST 控制器的示例代码:
@Secured(SecurityRule.IS_AUTHENTICATED)
@Controller
public class HomeController {
@Produces(MediaType.TEXT_PLAIN)
@Get
public String index(Principal principal) {
return principal.getName();
}
}
我知道我可以得到校长的名字,即。来自 HttpRequest 的用户名。但是我如何获得我的附加属性?
(也许我对 JWT 有点误解???)
- 这些是 JWT 的“声明”吗?
- 我是否需要通过数据库表中的用户名加载相应的用户?
- 如何验证发送的用户名是否确实有效?
编辑 更详细地描述我的用例:
我的用例的安全要求
- 不要向客户公开有效信息
- 验证客户端(移动应用程序)通过 REST 发送的所有内容
身份验证流程
带有 JWT 的默认 oauth2 流:
前提条件:用户已经注册。用户名、哈希(密码)和其他属性(电子邮件、地址、团队 ID、..)在后端是已知的。
- 客户端 POST 用户名和密码到 /login 端点
- 客户端收到 JWT 作为回报,使用服务器密码签名
- 在以后的每个请求中,客户端都会将此 JWT 作为 Http 标头中的承载发送。
- 后端验证 JWT <==== 这是我想知道如何在 Micronaut 中执行此操作的内容。
问题
- 如何验证 JWT 是否有效?
- 我应该如何以及在哪个 Java 类中获取该用户的附加信息(附加属性)。我应该使用什么 ID 来获取此信息。解码后的 JWT 中的“子”或“名称”?