有人知道如何在具有自己的自定义Auth提供程序的API网关服务和独立用户服务下,在vert.x微服务体系结构中实现身份验证和授权过程。它是否应该使用共享数据(hazelcast映射)来存储一些用户信息,例如名称,角色(通过令牌)或其他?我,很伤脑筋。
答案 0 :(得分:0)
作为微服务架构的一部分,我不会直接在vert.x微服务中实现身份验证,但是会使用诸如tyk或kong之类的API管理网关。
然后,我将只使用所需的任何数据库来检查用户对我的微服务中的数据的权限。
如果您真的想直接在微服务中处理身份验证,也可以挖掘this track。
答案 1 :(得分:0)
具有用户服务,我希望通过它执行所有身份验证和授权操作。 最后,我做到了:
jdbcAuth.rxAuthenticate(authInfo)
.map(user -> user.principal().getString("username"))
.flatMap(username -> roleRepository.findByUsername(username).map(roles -> {
JWTOptions jwtOptions = new JWTOptions().setAlgorithm("RS256");
roles.forEach(jwtOptions::addPermission);
LOGGER.info("Token successfully created");
String token = jwtAuth.generateToken(new JsonObject().put("username", username), jwtOptions);
return new JsonObject().put("accessToken", token).put("tokenType", "Bearer");
}))
.subscribe(SingleHelper.toObserver(handler));
在其他微服务上,我们将全局JWTAuth处理程序与pulicKey一起放置:
JWTAuthHandler.create(JWTAuth.create(vertx.getDelegate(), new JWTAuthOptions().addPubSecKey(new PubSecKeyOptions()
.setAlgorithm("RS256")
.setPublicKey(<PUBLIC_KEY>))));
此处理程序将用户设置为上下文,我们可以通过context.user()获取它并检查权限。顺便说一下,我们可以将此处理程序与addAuthority()方法一起放在路由上以进行访问检查。