Golang中的认证服务对比:Ory Keto vs. Speedle vs. Hashicorp Vault

Golang中的认证服务对比:Ory Keto vs. Speedle vs. Hashicorp Vault 正在研究能够提供登录服务,同时存储身份和访问管理的服务。有没有人熟悉以下多个服务,可以给出它们之间的一些优缺点?

2 回复

更多关于Golang中的认证服务对比:Ory Keto vs. Speedle vs. Hashicorp Vault的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Golang生态中,Ory Keto、Speedle和Hashicorp Vault确实都是常用的权限与访问管理服务,但它们的定位和适用场景有显著差异。以下是基于技术实现的对比分析:

1. Ory Keto

定位:专注于细粒度关系型访问控制(ReBAC/ABAC)的权限服务,不处理身份认证(需配合Ory Hydra等使用)。 优点

  • 原生支持Google Zanzibar模型,适合复杂关系权限(如“用户可查看其所属团队的项目”)
  • 轻量级gRPC/HTTP API,易于集成到微服务架构
  • 声明式配置支持实时策略更新

缺点

  • 无内置存储,需依赖PostgreSQL/MySQL
  • 不处理认证流程,需额外集成

示例(检查权限)

import "github.com/ory/keto/proto/ory/keto/relation_tuples/v1alpha2"

func checkPermission(client ketoClient, namespace, object, relation, subject string) bool {
    resp, err := client.Check(context.Background(), &v1alpha2.CheckRequest{
        Namespace: namespace,
        Object:    object,
        Relation:  relation,
        Subject:   &v1alpha2.Subject{Ref: &v1alpha2.Subject_Id{Id: subject}},
    })
    return resp.Allowed
}

2. Speedle

定位:支持RBAC/ABAC策略管理的独立授权服务。 优点

  • 同时支持RBAC和ABAC模型,策略语法灵活
  • 内置策略存储(文件/etcd),无需额外数据库
  • 提供Golang SDK直接集成到业务代码

缺点

  • 社区活跃度较低,更新频率慢
  • 分布式部署依赖etcd集群

示例(本地策略评估)

import "github.com/oracle/speedle/api/eval"

func evalLocalPolicy(subject, action, resource string) bool {
    evaluator, _ := eval.NewFromFile("policies.json")
    ctx := map[string]interface{}{"ip": "192.168.1.1"}
    result, _ := evaluator.Evaluate(subject, action, resource, ctx)
    return result == eval.Allow
}

3. Hashicorp Vault

定位:完整的秘密管理平台,附带基础RBAC和动态凭证功能。 优点

  • 统一管理密钥、证书、数据库凭证等
  • 支持动态秘密自动轮换
  • 内置审计日志和多种认证后端(LDAP/OIDC等)

缺点

  • 权限模型相对简单,仅适合基础RBAC
  • 资源消耗大,不适合纯权限控制场景

示例(读取动态数据库凭证)

import "github.com/hashicorp/vault/api"

func getDBCreds(vaultAddr, role string) (string, error) {
    client, _ := api.NewClient(&api.Config{Address: vaultAddr})
    secret, err := client.Logical().Read("database/creds/" + role)
    return secret.Data["username"].(string), err
}

技术选型建议:

  • 需要复杂关系权限控制 → Ory Keto(配合Ory Hydra做认证)
  • 需要轻量级RBAC/ABAC混合方案 → Speedle
  • 已有Vault且只需基础权限管理 → 使用Vault内置RBAC
  • 纯登录服务需求 → 考虑Keycloak或Auth0集成

实际选择需结合具体场景:若已用Vault管理密钥且权限模型简单,可直接扩展使用;若需处理“用户-资源-关系”型权限,Keto的图关系引擎更合适。

回到顶部