作者 Eaton
导语
在我们使用微服务架构时,经常会选择通过 RPC 通信框架方便地实现服务间的调用。但方便的同时也带来了一些安全隐患,任何用户都能够访问对外公开的接口,可能造成部分敏感数据的泄露,这是我们不希望看到的,怎么避免呢?这要求我们对访问的用户进行鉴别,因此我们需要一个细化到服务的鉴权访问机制。本文将介绍 TARS 的服务鉴权及其使用方法。
目录
什么是鉴权
鉴权是指验证用户或服务是否具有访问系统的权利。对于部分公开的接口,我们并不希望所有用户或服务都能够访问,只希望特定的对象能够访问,因此我们需要鉴别访问接口的用户或服务的身份,确保访问的对象是我们希望的,保证接口的安全,这就是鉴权。
鉴权一般可分为用户鉴权和服务鉴权。
-
用户身份鉴权通常依赖于用户系统,需要在业务代码中实现,实现方式有很多种,取决于具体的业务需求和使用的用户系统。
-
服务鉴权则是对调用方服务的鉴别,确保只有特定的服务或客户端能够调用该服务。
TARS 服务鉴权
TARS 提供了一个强大的 RPC 框架,你只需要得到被调用方的 TARS 协议文件,就可以使用TARS框架编码,请求被调方服务。同时 TARS 框架中还提供了一个细化到服务的鉴权访问机制,通过账号密钥对的形式,使被调服务能够对调用方进行鉴别。
接下来我们以 TarsCpp为例,通过一个实例来看看如何在 TARS 中使用服务鉴权。
服务准备
我们需要准备两个服务,一个是被调服务,一个主调服务。
被调服务 TestServer
首先我们创建一个被调服务,应用名为 TestApp
,服务名为 TestServer
,Obj
名为 Test
,如下
/usr/local/tars/cpp/script/cmake_tars_server.sh TestApp TestServer Test
生成如下文件
TestServer
├── build
├── CMakeLists.txt
└── src
├── CMakeLists.txt
├── Test.h
├── TestImp.cpp
├── TestImp.h
├── TestServer.cpp
├── TestServer.h
└── Test.tars
然后修改 Test.tars
文件,定义一个 test
接口,传入一个字符串 input
,返回一个字符串 output
module TestApp
{
interface Test
{
int test(string input, out string output);
};
};
接着,在 TestImp.cpp
接口实现文件中,添加接口实现,如下
int TestImp::test(const string &input, string &output, tars::TarsCurrentPtr current)
{
output = input;
return 0;
}
实现非常简单,接收到一个字符串,然后直接返回这个字符串。最后,编译构建服务,并在 TarsWeb 平台发布该服务即可。
关于 TARS 服务的创建与部署,参考文档 TARS 开发入门&#