在这个例子中,我们将为OAuth2协议创建Cassandra数据模型。这里的重点是设计模型和实际执行的相关查询。我们不打算创建真正的API端点,但我至少会添加关于每个功能如何使用的例子。
密钥空间
CREATE KEYSPACE IF NOT EXISTS auth
模型
客户
id 字段在代码中没有使用。它可以被用作另一个应用程序的 "外键",那里保存着关于客户的更详细的信息。这完全取决于你的系统设计,所以如果你想,你可以把它删除。
CREATE TABLE IF NOT EXISTS auth.clients (
令牌
访问和刷新令牌记录都会有一个TTL,所以这个表的作用就像一个缓存。这是为了防止出现一个巨大的表。
CREATE TABLE IF NOT EXISTS auth.tokens (
应用流程
客户端注册
通过接受UUID v4格式的外部标识符来创建一个新客户。
POST /api/v1/clients HTTP/1.1
HTTP/1.1 201 Created
创建令牌 (client_credentials)
创建一个新的访问和刷新令牌。
POST /oauth/token HTTP/1.1
HTTP/1.1 200 OK
刷新令牌 (refresh_token)
创建一个新的访问和旋转刷新令牌。
POST /oauth/token HTTP/1.1
HTTP/1.1 200 OK
撤销令牌
撤销属于一个客户的访问令牌或刷新令牌。
POST /oauth/revoke HTTP/1.1
消耗API
在进行受保护的API请求之前,验证一个访问令牌。
{Method} {endpoint} HTTP/1.1
结构
├── docker
文件
docker-compose.yaml
version: "3.7"
cassandra.go
package cassandra
error.go
package storage
type.go
package storage
model.go
package storage
经理.go
package storage
客户端
package cassandra
符号.go
package cassandra
主程序
package main
测试
当前状态
cqlsh> SELECT * FROM auth.clients;
cqlsh> SELECT * FROM auth.tokens;
新状态
在这个阶段,运行go run -race main.go 命令。
$ go run -race main.go
cqlsh> SELECT * FROM auth.clients;
cqlsh> SELECT * FROM auth.tokens;