在技术讨论中有人问我如何编写应用程序以在公司内部使用,以及如何将其作为API公开给第三方客户?
我假设这是在Web服务的上下文中。我在想,第三方不会简单地调用终点并消耗响应吗?
很明显,这个答案是原始的,我想不通了。
答案 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管理器来完成。