【问题标题】:Better way to implement authentication in microservice architecture using vert.x使用 vert.x 在微服务架构中实现身份验证的更好方法
【发布时间】:2019-05-01 08:34:51
【问题描述】:

有人知道如何通过 API 网关服务和独立用户服务在 vert.x 微服务架构中实现身份验证和自动化过程,它有自己的自定义身份验证提供程序吗?它是否应该使用共享数据(hazelcast 地图)来存储一些用户信息,如姓名、令牌角色或其他内容?我,脑子坏掉了。。

【问题讨论】:

  • 到目前为止你发现了什么?任何研究,谷歌搜索?

标签: authentication oauth microservices vert.x


【解决方案1】:

作为微服务架构的一部分,我不会直接在我的 vert.x 微服务中实现身份验证,但我会使用 API 管理网关,例如 tykkong

然后我只会使用您想要的任何数据库检查用户对我的微服务中数据的权限。

如果你真的想直接在你的微服务中处理身份验证,你也可以挖掘this track

【讨论】:

  • 我不知道这个产品。我会查一下。谢谢)
  • @luckyshroom 有很多 api 管理网关解决方案(您甚至可以自己实现一个身份验证网关),但关键是当您需要通过微服务架构。 oauth 或 JWT 身份验证部分可能不是您的服务真正关心的问题,而在执行操作之前检查权限是(这不是一回事)。
  • 出于同样的原因,我认为最好通过像 Istio 这样的服务网格来处理弹性问题(重试策略、断路器等)、跟踪和监控,而不是直接在你的服务实现。
【解决方案2】:

拥有用户服务,我希望通过它执行所有身份验证和授权操作。 最后,我做到了:

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. 这个handler将用户设置到context,我们可以通过context.user()得到它并检查权限。顺便说一句,我们可以将这个处理程序与 addAuthority() 方法一起放在路由上进行访问检查。

【讨论】:

    猜你喜欢
    • 2015-09-11
    • 2018-12-16
    • 1970-01-01
    • 2022-01-14
    • 2020-03-13
    • 2018-09-24
    • 2017-05-28
    • 2018-01-18
    • 2017-10-05
    相关资源
    最近更新 更多