AUTH y tokens en nyx-kv
AUTH autentica un cliente con un token. Cada token acota los comandos a un namespace, dando aislamiento por tenant. Los tokens de admin pueden emitir TOKEN_LIST y TOKEN_REVOKE.
Código
// nyx-kv AUTH -- multi-tenant authentication with tokens
fn resp_cmd(parts: Array) -> String {
var sb: StringBuilder = StringBuilder.new()
sb.append("*")
sb.append(int_to_string(parts.length()))
sb.append("\r\n")
var i: int = 0
while i < parts.length() {
let p: String = parts[i]
sb.append("$")
sb.append(int_to_string(p.length()))
sb.append("\r\n")
sb.append(p)
sb.append("\r\n")
i = i + 1
}
return sb.to_string()
}
fn main() -> int {
let fd: int = tcp_connect("127.0.0.1", 6380)
if fd < 0 {
print("connection failed")
return 1
}
// Authenticate with a token -- subsequent commands are scoped to this tenant
let token: String = "my-api-token-123"
tcp_write(fd, resp_cmd(["AUTH", token]))
let auth_reply: String = tcp_read_line(fd)
print("AUTH -> " + auth_reply.trim())
// After auth, SET/GET operate in the tenant's namespace
tcp_write(fd, resp_cmd(["SET", "config:db", "postgres://localhost"]))
let set_reply: String = tcp_read_line(fd)
print("SET (authed) -> " + set_reply.trim())
// List all tokens (admin command, requires privileged AUTH)
tcp_write(fd, resp_cmd(["TOKEN_LIST"]))
let list_hdr: String = tcp_read_line(fd)
print("TOKEN_LIST header -> " + list_hdr.trim())
// Revoke a token (also admin-only)
tcp_write(fd, resp_cmd(["TOKEN_REVOKE", "old-token"]))
let revoke: String = tcp_read_line(fd)
print("TOKEN_REVOKE -> " + revoke.trim())
tcp_close(fd)
return 0
}
Salida
AUTH -> +OK SET (authed) -> +OK TOKEN_LIST header -> *2 TOKEN_REVOKE -> +OK
Explicación
nyx-kv extiende el modelo AUTH de Redis con un registro de tokens: cada token está atado a un prefijo de namespace, y los comandos emitidos en esa conexión quedan acotados silenciosamente a ese namespace. Dos tenants con tokens distintos pueden escribir en config:db sin colisionar nunca — el servidor reescribe la clave interna a <tenant>:config:db al vuelo.
Un subconjunto de tokens lleva el rol de admin. Las conexiones admin pueden emitir TOKEN_CREATE name namespace, TOKEN_LIST, y TOKEN_REVOKE token para gestionar el registro en tiempo de ejecución — sin necesidad de reiniciar el servidor. Esto convierte a una única instancia de nyx-kv en un backend multi-tenant de autoservicio, ideal para despliegues SaaS donde cada cliente obtiene un keyspace aislado.
En producción, rotá los tokens con un cronograma, guardalos cifrados en reposo, y nunca loguees los strings crudos del token.