使用vert.x在微服务架构中实现身份验证的更好方法

时间:2018-11-29 10:01:03

标签: authentication oauth microservices vert.x

有人知道如何在具有自己的自定义Auth提供程序的API网关服务和独立用户服务下,在vert.x微服务体系结构中实现身份验证和授权过程。它是否应该使用共享数据(hazelcast映射)来存储一些用户信息,例如名称,角色(通过令牌)或其他?我,很伤脑筋。

2 个答案:

答案 0 :(得分:0)

作为微服务架构的一部分,我不会直接在vert.x微服务中实现身份验证,但是会使用诸如tykkong之类的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));
  1. 对于用户身份验证,我使用JDBCAuth(以及生成新用户创建的solt哈希)
  2. 如果有这样的用户,我们将获得角色,生成带有可选声明的令牌,例如“用户名”和具有权限的JWTOptions。
  3. 放入请求标头中授权:Bearer --token-
  4. 在其他微服务上,我们将全局JWTAuth处理程序与pulicKey一起放置:

    JWTAuthHandler.create(JWTAuth.create(vertx.getDelegate(), new JWTAuthOptions().addPubSecKey(new PubSecKeyOptions()
            .setAlgorithm("RS256")
            .setPublicKey(<PUBLIC_KEY>))));
    
  5. 此处理程序将用户设置为上下文,我们可以通过context.user()获取它并检查权限。顺便说一下,我们可以将此处理程序与addAuthority()方法一起放在路由上以进行访问检查。