2016-09-02 10 views
0

나는 grpc 서비스에 기능 기반 액세스 제어 기능을 추가하려고 생각 해왔다. 내 생각은 proto 파일에 정의 된 각 rpc에 대해 필요한 기능을 사용하고 grpc 인터셉터를 사용하여 사용자가 제공 한 기능이 rpc에 필요한 기능과 일치하는지 확인하는 것이 었습니다. 여러 문서와 자습서를 살펴 봤지만 어디서부터 시작 해야할지에 관해서는 약간의 손실이 있습니다. 어떤지도라도 감사 할 것입니다.Protobuf에 액세스 제어 추가하기

답변

1

한 가지 방법은 proto 파일을 구문 분석하고 코드 또는 데이터 파일을 생성하는 생성기 플러그인을 작성하는 것입니다. 마찬가지로 grpc-gateway 않습니다. 각 rpc에는 사용자 정의 할 수있는 옵션이 있으며 this과 같은 proto 파일에 추가 할 수 있습니다. 이러한 옵션을 protobuf.MethodOptions라고합니다. 이 부분은 here입니다. 따라서 자신의 메소드 옵션을 가지고이를 사용하여 유효성 검사기 또는 수정자를 생성 한 다음 인터셉터에서 유효성 검사기를 호출하여 해결할 수 있습니다.

내가 말할 수있는 또 다른 자유로운 방법은 지도가 포함 된 json 또는 yaml 파일을 가질 수 있다는 것입니다. 모든 protobuf 메소드에는 "/package.service/rpcMethodName"으로 형식이 지정된 고유 한 이름 식별자가 있습니다. 이 같은 RPC 방법이 있으면 그렇게 :

syntax = "proto3"; 

package yourpackage; 

service ServiceName { 
    rpc MethodName(Request) returns (Response) {}; 
} 

을이 방법의 고유 식별자는 grpc.UnaryServerInfo.FullMethod으로, 당신의 인터셉터 안에 찾을 것이다 /yourpackage.ServiceName/MethodName으로 같은 것입니다.

yaml 또는 json을 통해 별도의 맵을 유지 관리하는 방식으로 FullMethodName 및 필요한 기능이 포함 된 다음 인터셉터 내부에서 맵을 읽고 메서드에 원하는 기능을 찾고 원하는 작업을 적용하십시오.

+0

정말 고마워요. 이것들은 좋은 조언입니다! – user1646637