flojo #uaa
UAA es un servicio de gestión de identidades multiinquilino, utilizado en Cloud Foundry, pero también disponible como servidor OAuth2 independiente. Su función principal es la de proveedor de OAuth2, emitiendo tokens para que las aplicaciones cliente los utilicen cuando actúan en nombre de los usuarios de Cloud Foundry. También puede autenticar a los usuarios con sus credenciales de Cloud Foundry y puede actuar como un servicio SSO utilizando esas credenciales (u otras). Tiene puntos finales para administrar cuentas de usuario y registrar clientes OAuth2, así como varias otras funciones de administración.
El servicio de autenticación es uaa
. Es una aplicación web Spring MVC simple. Implemente normalmente en Tomcat o en el contenedor de su elección, o ejecute ./gradlew run
para ejecutarlo directamente desde el directorio uaa
en el árbol de código fuente. Cuando se ejecuta con gradle, escucha en el puerto 8080 y la URL es http://localhost:8080/uaa
El servidor UAA admite las API definidas en el documento UAA-API. Para resumir:
Los puntos finales OAuth2 /oauth/authorize y /oauth/token
Un punto final /login_info para permitir consultar las solicitudes de inicio de sesión requeridas
Un punto final /check_token, para permitir que los servidores de recursos obtengan información sobre un token de acceso enviado por un cliente OAuth2.
Un punto final /token_key, para permitir que los servidores de recursos obtengan la clave de verificación para verificar las firmas de los tokens.
Punto final de aprovisionamiento de usuarios SCIM
OpenID conecta puntos finales para admitir autenticación/información de usuario. Soporte parcial de OpenID.
La autenticación puede ser realizada por clientes de línea de comandos enviando las credenciales directamente al punto final /oauth/authorize
(como se describe en el documento UAA-API). Hay un ImplicitAccessTokenProvider
en Spring Security OAuth que puede hacer el trabajo pesado si su cliente es Java.
Autenticar
GET /login
Una interfaz de inicio de sesión de formulario básico.
Aprobar la concesión del token OAuth2
GET /oauth/authorize?client_id=app&response_type=code...
Punto final de autorización OAuth2 estándar.
Obtener token de acceso
POST /oauth/token
Punto final de autorización OAuth2 estándar.
Requisitos:
Si esto funciona, estás en el negocio:
$ git clone git://github.com/cloudfoundry/uaa.git
$ cd uaa
$ ./gradlew run
Todas las aplicaciones funcionan junto con las aplicaciones que se ejecutan en el mismo puerto (8080) que /uaa
, /app
y /api
.
UAA registrará un archivo llamado uaa.log
que se puede encontrar usando el siguiente comando: –
$ sudo lsof | grep uaa.log
que deberías encontrar debajo de algo como:-
$TMPDIR/cargo/conf/logs/
Primero ejecute el servidor UAA como se describe arriba:
$ ./gradlew run
Desde otra terminal puedes usar curl para verificar que UAA se ha iniciado solicitando información del sistema:
$ curl --silent --show-error --head localhost:8080/uaa/login | head -1
HTTP/1.1 200
Para solicitudes complejas, es más conveniente interactuar con UAA utilizando uaac
, el cliente de línea de comandos de UAA.
Para cargar el agente JDWP para la depuración de UAA jvm, inicie el servidor de la siguiente manera:
./gradlew run -Dxdebug=true
o
./gradlew -Dspring.profiles.active=default,hsqldb,debug run
Luego puede conectar su depurador al puerto 5005 del proceso jvm.
Para suspender el inicio del servidor hasta que se conecte el depurador (útil para depurar el código de inicio), inicie el servidor de la siguiente manera:
./gradlew run -Dxdebugs=true
o
./gradlew -Dspring.profiles.active=default,hsqldb,debugs run
./gradlew run
ejecuta el servidor UAA con la base de datos hsqldb de forma predeterminada.
% docker run --name mysql1 -e MYSQL_ROOT_PASSWORD=changeme -d -p3306:3306 mysql
uaa
(por ejemplo, en una sesión interactiva de mysql) % mysql -h 127.0.0.1 -u root -p
...
mysql > create database uaa ;
% ./gradlew -Dspring.profiles.active=mysql,default run
docker run --name postgres1 -p 5432:5432 -e POSTGRES_PASSWORD=mysecretpassword -d postgres
uaa
(por ejemplo, en la sesión interactiva psql) % psql -h 127.0.0.1 -U postgres
create database uaa;
create user root with superuser password 'changeme';
% ./gradlew -Dspring.profiles.active=postgresql,default run
c uaa
psql (14.5 (Homebrew), server 15.0 (Debian 15.0-1.pgdg110+1))
WARNING: psql major version 14, server major version 15.
Some psql features might not work.
You are now connected to database "uaa" as user "postgres".
d
List of relations
Schema | Name | Type | Owner
--------+-------------------------------+----------+-------
public | authz_approvals | table | root
public | expiring_code_store | table | root
public | external_group_mapping | table | root
public | external_group_mapping_id_seq | sequence | root
public | group_membership | table | root
public | group_membership_id_seq | sequence | root
public | groups | table | root
public | identity_provider | table | root
public | identity_zone | table | root
public | oauth_client_details | table | root
public | oauth_code | table | root
public | oauth_code_id_seq | sequence | root
public | revocable_tokens | table | root
public | schema_version | table | root
public | sec_audit | table | root
public | sec_audit_id_seq | sequence | root
public | spring_session | table | root
public | spring_session_attributes | table | root
public | user_info | table | root
public | users | table | root
(23 rows)
Puedes ejecutar las pruebas de integración con Docker.
$ run-integration-tests.sh <dbtype>
creará un contenedor acoplable que ejecuta la base de datos uaa + ldap + mediante la cual se ejecutan las pruebas de integración.
Las pruebas unitarias uaa predeterminadas (./gradlew test IntegrationTest) utilizan hsqldb.
Para ejecutar las pruebas unitarias con Docker:
$ run-unit-tests.sh <dbtype>
Las pruebas unitarias uaa predeterminadas ( ./gradlew test
) utilizan hsqldb.
Comience por averiguar a qué proyecto de Gradle pertenece su prueba. Puede encontrar todos los proyectos ejecutando
$ ./gradlew projects
Para ejecutar una clase de prueba específica, puede especificar el módulo y la clase de prueba.
$ ./gradlew :<project name>:test --tests <TestClass>.<MethodName>
En este ejemplo, solo se ejecutan las pruebas JdbcScimGroupMembershipManagerTests en el módulo cloudfoundry-identity-server:
$ ./gradlew :cloudfoundry-identity-server:test
--tests "org.cloudfoundry.identity.uaa.scim.jdbc.JdbcScimGroupMembershipManagerTests"
o para ejecutar todas las pruebas en una clase
$ ./gradlew :<project name>:test --tests <TestClass>
Es posible que desee utilizar el comando gradle completo que se encuentra en la parte inferior del script scripts/unit-tests.sh
anteponiendo el nombre del proyecto al comando test
y agregando la opción --tests
.
$ ./gradlew :clean :assemble -Pversion=${UAA_VERSION}
En realidad, hay varios proyectos aquí, la aplicación principal del servidor uaa
, una biblioteca cliente y algunos ejemplos:
uaa
un proyecto WAR para una fácil implementación
server
un proyecto JAR que contiene la implementación de la API REST de UAA (incluido SCIM) y la interfaz de usuario
model
un proyecto JAR utilizado tanto por la biblioteca cliente como por el servidor
api
(muestra) es un servicio de recursos OAuth2 que devuelve una lista simulada de aplicaciones implementadas
app
(muestra) es una aplicación de usuario que utiliza ambos de los anteriores
En términos de CloudFoundry
uaa
proporciona un servicio de autenticación además de delegación autorizada para aplicaciones y servicios back-end (mediante la emisión de tokens de acceso OAuth2).
api
es un servicio que proporciona recursos a los que otras aplicaciones pueden desear acceder en nombre del propietario del recurso (el usuario final).
app
es una aplicación web que necesita inicio de sesión único y acceso al servicio api
en nombre de los usuarios.
Requisitos previos
La implementación de Kubernetes está en desarrollo activo. Debería esperar cambios frecuentes (y posiblemente importantes). Esta sección se actualizará a medida que se avance en este conjunto de funciones. A partir de ahora:
El directorio K8s contiene plantillas ytt
que se pueden representar y aplicar a un clúster K8s.
En desarrollo, este Makefile se puede utilizar para actividades comunes de renderizado e implementación.
En producción, lo más probable es que desees utilizar ytt directamente. Algo como esto debería ponerte en marcha:
$ ytt -f templates -f values/default-values.yml | kubectl apply -f -
Si desea anular algunos de esos valores, puede hacerlo aprovechando la funcionalidad de superposición de YTT.
$ ytt -f templates -f values/default-values.yml -f your-dir/production-values.yml | kubectl apply -f -
Por supuesto, siempre puedes abandonar los valores predeterminados por completo y proporcionar tu propio archivo de valores.
Aquí hay algunas maneras de involucrarse en la comunidad:
Requisitos:
Para depurar integraciones UAA y LDAP, utilizamos una imagen acoplable OpenLdap del proyecto Bitnami de VMWare.
uaa/src/main/resources/uaa.yml
y habilite LDAP descomentando la línea 7, spring_profiles: ldap,default,hsqldb
docker-compose up
desde el directorio scripts/ldap
scripts/ldap
verifique la conectividad para ejecutar el contenedor OpenLdap ejecutando docker-confirm-ldapquery.sh
./gradlew run
/uaa
e inicie sesión con el usuario LDAP user01
y contraseña password1
Utilice el siguiente comando para limpiar el contenedor y el volumen:
docker-compose down --volumes