2016-10-22 129 views
1

我正在尝试使用RPC作为使用http REST API实际实现的一些服务的替代方案。由于这些服务实际上并不公开,并且只能由使用RPC的其他服务使用,因此更有意义。golang JSON RPC授权

我正在寻找关于RPC授权最佳实践 的一些提示,因为我真的不确定要遵循的方式。

我使用golang此

  • 我如何确保一个RPC得到只能由经过授权的服务

  • 使用我可以只授权的暴露过程的一个子集

Thx

回答

2

您可以使用类似的w ay授权REST服务。

JSON Web令牌(JWT)是一种广泛使用的授权方法。您可以在jwt.io找到关于智威汤逊的演示和概念性概述。简而言之,JWT是一个签名的JSON对象,编码为一个字符串。 JSON对象可以对客户端拥有的权限进行任意数量的“声明”。

您的服务将签署JWT(使用私钥)并在身份验证过程中将其传递给客户端,我建议通过JSON-RPC方法完成此操作,该方法检查客户端的权限(通过API密钥,用户名和密码或其他)。然后,您的受保护方法可能需要JWT作为其参数之一:如果JWT得到验证且具有正确的声明,则执行其正常功能,否则返回错误。

我建议看看github.com/dgrijalva/jwt-go包。它提供了发布和验证JWT的方法。

+0

所以你建议实现一个服务[service-identity-provider],其中服务验证并获得一个包含与其授权有关的声明的JWT,而不是将该令牌与RPC请求一起作为参数传递,并将其用于另一个授权验证请求方。我对吗? – Gavello