La autenticación y autorización han mejorado enormemente en Couchbase Server 5.0. Llevamos tiempo publicando en el blog las nuevas funciones RBAC de la versión preliminar para desarrolladores.
- Autenticación y autorización con RBAC - introducción / parte 1
- Autenticación y autorización con RBAC (Parte 2) - gestión de usuarios
- Métodos de autenticación SDK mejorados - Couchbase 5.0 - una introducción a Python, Java, PHP y .NET
Ahora que Couchbase Server 5.0 Beta ha sido lanzado, estoy escribiendo una entrada en el blog más en profundidad sobre cómo utilizar el SDK .NET de Couchbase junto con estas nuevas características.
Los ejemplos de código completos utilizados en esta entrada del blog son los siguientes disponible en Github.
Crear un cubo
Como he mencionado en los posts anteriores, los días de los buckets con contraseñas han pasado. El futuro pertenece a los usuarios, usuarios que tienen permisos específicos para cubos específicos.
Empecemos por crear un bucket. En la interfaz de usuario de Couchbase, inicia sesión como el administrador que creaste al instalar Couchbase. Ve a "Buckets" y haz clic en "ADD BUCKET" (arriba a la derecha). Verás el cuadro de diálogo "Añadir cubo de datos". Observa que ya no existe el campo "contraseña" (ni siquiera en "Configuración avanzada de cubos").

Dale al cubo un nombre y una cantidad de memoria, y haz clic en "Añadir cubo". Ya tiene un cubo. Pero, aparte de un administrador en la interfaz de usuario, nadie puede acceder a este cubo todavía.
Crear un usuario
Para tener acceso a este bucket, debes crear un usuario. En Couchbase 5.0, los "usuarios" son una característica completamente nueva, trayendo características más ricas de autenticación y autorización a Couchbase Server.
Mientras sigue conectado como administrador, vaya a "Seguridad" para ver una lista de usuarios. Haz clic en "AÑADIR USUARIO" (arriba a la derecha).

Cree un usuario con el nombre y la contraseña que desee. Puede elegir qué funciones tiene el usuario y para qué cubos (si procede). Vamos a dar a este usuario los roles de Escritor de Datos y Lector de Datos, para el cubo que se acaba de crear (por ejemplo, "mi cubo"), pero NO cualquier rol de Consulta.

Una vez añadido el usuario, puede pasar el ratón por encima de los roles para obtener una descripción de lo que significa el rol.

Autenticación y autorización con el SDK .NET de Couchbase
Ahora que tenemos un cubo y un usuario, veamos cómo utilizarlos con el SDK .NET.
Empiece por crear un Grupo objeto.
|
1 2 3 4 |
var grupo = nuevo Grupo(nuevo ClientConfiguration { Servidores = nuevo Lista<Uri> { nuevo Uri("https://localhost:8091") } }); |
Tiene un clúster, pero su programa aún no se ha autenticado. Utilice un PasswordAuthenticator para especificar las credenciales. A continuación, utilice ese objeto con la función Autentificar método. En este ejemplo, estoy usando credenciales incorrectas.
|
1 2 |
var autentificador = nuevo PasswordAuthenticator("miusuario", "contraseña errónea"); grupo.Autentificar(autentificador); |
Ahora, si intento realizar una operación como OpenBucket en el cluster, se lanza una excepción.
|
1 2 3 4 5 6 7 8 9 |
pruebe { var cubo = grupo.OpenBucket("mybucket"); } captura (Excepción ex) { Consola.WriteLine("Error obteniendo cubo".); Consola.WriteLine(ex.Mensaje); } |

Ahora, intentémoslo de nuevo usando las credenciales correctas. La autenticación funcionará. Pero hablemos ahora de la autorización.
Recuerda que sólo le di a este usuario los roles de Escritor de Datos y Lector de Datos (para mybucket). Por lo tanto, si me autentifico e inserto un documento ahora, funciona.
|
1 2 3 4 5 6 7 8 9 10 11 |
var grupo = nuevo Grupo(nuevo ClientConfiguration { Servidores = nuevo Lista<Uri> { nuevo Uri("https://localhost:8091") } }); var autentificador = nuevo PasswordAuthenticator("miusuario", "contraseña"); grupo.Autentificar(autentificador); var cubo = grupo.OpenBucket("mybucket"); // insertar un documento, esto debería estar permitido var resultado = cubo.Inserte(Guía.NuevaGuid().ToString(), nuevo {foo = "bar"}); Consola.WriteLine("La inserción se ha realizado correctamente: " + resultado.Éxito); |

Pero si intentara, por ejemplo, ejecutar un Consulta N1QL (SQL para JSON)fallaría. Esto se debe a que ese usuario no está autorizado a ejecutar consultas.
|
1 2 3 |
var queryResult = cubo.Consulta<int>("SELECT COUNT(1) FROM `" + cubo.Nombre + "`"); Consola.WriteLine("La consulta se ha realizado correctamente: " + queryResult.Éxito); queryResult.Errores.Para cada(e => Consola.WriteLine("Error: " + e.Mensaje)); |
Sólo estoy haciendo un simple CONTAR(1) consulta de agregación. Como ese usuario no está autorizado, esto es lo que se muestra:

Una cosa más
Si te preocupa el efecto que esto tendrá al actualizar de Couchbase Server 4.x a Couchbase Server 5.0, aquí tienes un consejo. Si creas un usuario con el mismo nombre que el bucket (por ejemplo, un bucket llamado "foo" y un usuario llamado "foo"), entonces las antiguas APIs .NET de Couchbase que todavía esperan una contraseña de bucket funcionarán como antes. Sólo dale a ese usuario un rol de "Administrador de Cluster" por ahora. Esta es una buena solución temporal hasta que puedas rediseñar tu sistema para usar una aproximación regimentada a los roles.
Resumen
¡Couchbase Server 5.0 ya está en beta! Estas características de autenticación basada en roles (RBAC) hacen de Couchbase un líder en seguridad de bases de datos de documentos, y personalmente estoy muy contento de que Couchbase vaya en esta dirección. La seguridad es importante, pero a menudo los desarrolladores la pasan por alto.
Si tiene alguna pregunta, por favor pregunte en los foros de Couchbasedeje un comentario a continuación, o ping me on Twitter @mgroves.