先在 Playground 中试用
无需安装,即可先体验 Speedle 的基本功能。 打开 Playground 策略实验室,编辑 SPDL 策略、设置用户、资源和动作,即可在浏览器中查看真实的 Allow/Deny(允许/拒绝)授权结果,无需安装 Go 或启动服务。
准备在本机编译和运行 Speedle 时,再继续下面的步骤。
准备环境
准备 Linux 或 macOS、Bash、Git、curl,以及 Go 1.26.10 或 Go 1.27.3(也可使用同一大版本的更新补丁版本)。Speedle 支持 Go 1.26 和 Go 1.27 的安全补丁版本;本教程已在 Go 1.26.10 和 Go 1.27.3 上验证,推荐使用稳定版 Go 1.27.3 完成本教程。
按照 Go 官方安装说明安装,然后检查版本:
go versionGo 会自动配置 GOROOT 和默认的 GOPATH,无需手动指定。下面将程序编译到源码目录下的 bin 目录。
第一步:下载源码并编译
git clone --depth 1 https://github.com/teramoby/speedle-plus.git
cd speedle-plus
mkdir -p bin
go build -o ./bin/ ./cmd/spctl ./cmd/speedle-pms ./cmd/speedle-ads
ls bin输出目录中应有三个程序:
spctl speedle-ads speedle-pmsspctl:命令行工具。speedle-pms:授权策略管理服务(PMS)。speedle-ads:授权决策服务(ADS)。
新版 Go 使用 go build 或 go install 构建可执行程序;go get 用于管理模块依赖。
第二步:启动策略管理服务
本教程用于本机开发演示。--insecure=true 为下面的 REST 示例启用明文 HTTP。gRPC 服务默认关闭,需要时用 --grpc-endpoint 开启,例如 PMS 用 --grpc-endpoint 127.0.0.1:50001,ADS 用 --grpc-endpoint 127.0.0.1:50002;gRPC 与 REST 使用相同的 TLS 设置。生产环境的传输安全和授权配置请参阅安全指南。
在第一个终端中,进入 speedle-plus 源码目录后执行:
./bin/speedle-pms --store-type file --filestore-loc ./quick-start-policies.json --endpoint 127.0.0.1:6733 --insecure=true保持服务运行,等待 REST 服务启动后再继续。PMS 会在当前源码目录创建 quick-start-policies.json;PMS 和 ADS 必须使用同一个文件。
第三步:创建和查看策略
打开第二个终端,进入同一个 speedle-plus 源码目录。
以图书馆为例,创建 library 服务:
./bin/spctl --pms-endpoint http://127.0.0.1:6733/policy-mgmt/v1/ create service library添加“张三可以借书”的策略:
./bin/spctl --pms-endpoint http://127.0.0.1:6733/policy-mgmt/v1/ create policy -c "grant user ZhangSan borrow book" --service-name=library查看服务及其策略:
./bin/spctl --pms-endpoint http://127.0.0.1:6733/policy-mgmt/v1/ get service --all输出中应包含 library 服务及刚创建的授权策略。
第四步:启动授权决策服务
打开第三个终端,进入同一个 speedle-plus 源码目录:
./bin/speedle-ads --store-type file --filestore-loc ./quick-start-policies.json --endpoint 127.0.0.1:6734 --insecure=true保持服务运行,等待 REST 服务启动后再继续。
第五步:验证授权结果
在第二个终端中,询问张三是否可以借书:
curl --fail --silent --show-error --header 'Content-Type: application/json' --data '{"subject":{"principals":[{"type":"user","name":"ZhangSan"}]},"serviceName":"library","resource":"book","action":"borrow"}' http://127.0.0.1:6734/authz-check/v1/is-allowed响应中应包含 "allowed":true。
再询问没有获得授权的李四是否可以借书:
curl --fail --silent --show-error --header 'Content-Type: application/json' --data '{"subject":{"principals":[{"type":"user","name":"LiSi"}]},"serviceName":"library","resource":"book","action":"borrow"}' http://127.0.0.1:6734/authz-check/v1/is-allowed响应中应包含 "allowed":false。
使用结束后,在 PMS 和 ADS 的终端分别按 Ctrl+C 停止服务。策略文件会保留在源码目录中;再次执行创建命令时,请使用新的策略文件。