将Web服务公开给第三方应用程序?

时间:2019-02-10 18:45:00

标签: java web-services microservices

在技术讨论中有人问我如何编写应用程序以在公司内部使用,以及如何将其作为API公开给第三方客户?

我假设这是在Web服务的上下文中。我在想,第三方不会简单地调用终点并消耗响应吗?

很明显,这个答案是原始的,我想不通了。

  1. 是否有已知的方法或任何框架可以做到这一点?
  2. 这里有什么考虑因素?我们该如何解决呢?

2 个答案:

答案 0 :(得分:0)

实现此目标的一种具体方法是使用Json Web令牌(JWT)保护的REST API。在每个REST端点上,您可以指定允许调用该端点的角色。

对于您的用例,您可以通过内部呼叫者的“系统”角色和外部呼叫者的未授权(即无角色)来实现。

MicroProfile JWT是您可以用来实现此目的的框架,它看起来可能像这样:

@Path("/rank")
@ApplicationScoped
public class RankingService {

    @GET
    @Path("/{playerId}")
    public long getRank(@PathParam("playerId") String id) {
        // get the ranking info for a player
        // anyone is allowed to do this
    }

    @POST
    @RolesAllowed({ "system" })
    @Path("/{playerId}")
    public void recordGame(@PathParam("playerId") String id, 
                           @QueryParam("place") int place, 
                           @HeaderParam("Authorization") String token) {
        // update player ranking information
        // only internal users are allowed to update ranks!
    }
}

这里是link to a talk that I gave at conference,介绍了使用MicroProfile JWT保护REST端点的安全。

答案 1 :(得分:0)

您将以相同的方式为内部和外部用户编写和公开RESTful服务,但是当您为外部客户端使用RESTful服务时,则必须注意以下几点

安全性-如果您的API是安全的,那么我们将如何实现呢?我们可以利用外部身份提供商来保护我们的API,例如(Azure AD,Auth0(https://auth0.com))

限制通话费率-如果您要限制来自外部用户的通话数量?例如免费套餐只允许100 req / min等。

注册过程-对于外部用户,您需要注意他们如何注册您的服务(获取令牌)才能访问您的服务。

可扩展-您的API应该可扩展。

HATEOAS -这是非常重要的REST原理。如果您遵循这种模式,则外部用户只需点击链接(https://en.wikipedia.org/wiki/HATEOAS)就可以更好地浏览您的API。

开放式API ,您的API应该有充分的文档记录,而开放式API(摇摆器)现在已成为非常标准的文件(https://swagger.io/specification/

您可以自己完成所有这些任务,也可以使用Any API管理器来完成。