2 个版本
使用旧的 Rust 2015
0.1.1 | 2018年12月18日 |
---|---|
0.1.0 | 2018年12月11日 |
#7 在 #opa
24 每月下载
17KB
285 行
actix-web-middleware-opa
Open Policy Agent (openpolicyagent/OPA) 对 actix-web 应用程序的中间件。
此中间件会对 Open Policy Agent 实例进行策略检查,针对传入的 HTTP 请求。
策略检查请求和响应都是通用的。
流程
示例
考虑以下请求
curl -XGET -H 'Authorization: Bearer 123123123' http://localhost:8080/order/item/1
这需要转换为对 OPA 的 JSON 调用
{
"input" : {
"token" : "123123123",
"method" : "GET",
"path" : ["order", "item", "1"]
}
}
我们将其表示为两个实现 Serialize
的 Rust 结构体
#[derive(Serialize)]
struct PolicyRequest {
input: PolicyRequestInput,
}
#[derive(Serialize)]
struct PolicyRequestInput {
token: String,
method: String,
path: Vec<String>,
}
预期的响应是一个 JSON 对象
{
"result" : {
"allow" : true
}
}
我们将其表示为两个实现 Deserialize
的 Rust 结构体
#[derive(Deserialize)]
struct PolicyResponse {
input: PolicyResponseResult,
}
#[derive(Deserialize)]
struct PolicyResponseResult {
allow: bool,
}
最后,我们必须实现 OPARequest<S>
特性,以便
impl<S> OPARequest<S> for PolicyRequest {
fn from_http_request(_req: &HttpRequest<S>) -> Result<Self, String> {
// This needs to be constructured from _req
Ok(PolicyRequest {
input: PolicyRequestInput {
token: "123".into(),
method: "GET",
path: vec!["order", "item", "1"],
}
})
}
}
type VerifierMiddleware = PolicyVerifier<PolicyRequest, PolicyResponse>;
依赖关系
~28MB
~529K SLoC