Add branded default provider and enforced enrollment

This commit is contained in:
2026-09-01 11:20:06 -06:00
parent da01343985
commit f3afd62993
22 changed files with 787 additions and 17 deletions
+7
View File
@@ -61,6 +61,13 @@ still contain the Unicode replacement character are not written to AD.
When `RemoteDesktopGroupDn` is configured, the broker also adds each successfully
synchronized SGU user to that dedicated AD security group. The laboratory
Windows client maps the group into its local **Remote Desktop Users** group.
Every synchronized user also receives `Universidad La Salle` in the AD
`company` attribute unless deployment configuration supplies another default.
The generic SGU credential is rendered as a dedicated branded tile instead of
being grouped below the anonymous **Other user** tile. Machine policy assigns
the SGU CLSID as the default provider while retaining the built-in Microsoft
password provider.
The managed hierarchy is rooted at `OU=Usuarios-SGU`: `Docentes`, `Alumnos`,
and `Administrativos` are direct child OUs beneath it.
+102
View File
@@ -0,0 +1,102 @@
# Enrolamiento obligatorio de clientes SGU
El flujo administrado instala y valida el Credential Provider **antes** de
ejecutar `Add-Computer`. La pertenencia al dominio es el último cambio; si falta
el runtime, un certificado, el registro COM, la directiva predeterminada o la
salud mTLS del broker, el script rechaza la unión.
Una cuenta administrativa todavía puede modificar Windows fuera de este flujo.
Por eso el enrolamiento también instala la tarea
`SGU-CredentialProvider-EnrollmentGuard`, ejecutada como `SYSTEM` al iniciar y
diariamente. La tarea conserva un paquete local protegido, repara el registro o
los binarios y vuelve a habilitar RDP/WinRM en equipos unidos al dominio. No
guarda contraseñas.
## 1. Preparar el nuevo Windows Enterprise
En la VM nueva, antes de unirla al dominio:
1. copiar `artifacts\credential-provider` y todos los scripts de `scripts`;
2. copiar el instalador offline más reciente de .NET 10 x64;
3. crear el certificado cliente no exportable:
```powershell
powershell.exe -NoProfile -ExecutionPolicy Bypass `
-File .\New-LabCertificate.ps1 `
-Role CredentialProviderClient
```
Copiar únicamente el `.cer` público al broker y registrarlo:
```powershell
powershell.exe -NoProfile -ExecutionPolicy Bypass `
-File .\Register-SguClientCertificate.ps1 `
-CertificatePath C:\SGUDeploy\new-client.cer
```
Exportar únicamente el certificado público actual del broker e importarlo en
el cliente con `Import-LabPeerCertificate.ps1`. Nunca copiar claves privadas.
## 2. Instalar, comprobar y unir en una sola operación
Ejecutar como administrador local dentro de la VM nueva. La credencial del
dominio se solicita de forma segura si no se proporciona como objeto
`PSCredential`:
```powershell
powershell.exe -NoProfile -ExecutionPolicy Bypass `
-File .\Enroll-SguDomainClient.ps1 `
-PublishPath C:\SGUDeploy\credential-provider `
-BrokerEndpoint https://sgu-auth.lci.lasalle.mx:8443/v1/authenticate `
-ClientCertificateThumbprint CLIENT_CERT_THUMBPRINT `
-ServerCertificateThumbprint SERVER_CERT_THUMBPRINT `
-DotNetRuntimeInstallerPath C:\SGUDeploy\dotnet-runtime-10-win-x64.exe `
-NewComputerName LAB-W11-001
```
Orden de la transacción:
1. instala .NET y los binarios versionados;
2. registra COM y configura SGU como proveedor predeterminado;
3. instala el guard de autorreparación;
4. exige health mTLS del broker y ejecuta las comprobaciones locales;
5. configura DNS del dominio;
6. sólo entonces ejecuta `Add-Computer` y reinicia;
7. al arrancar, el guard habilita RDP, NLA y WinRM y comprueba el estado final.
La directiva de Windows **Assign a default credential provider** selecciona SGU
por defecto. No se instala ningún filtro: el proveedor de contraseña de
Microsoft permanece disponible para cuentas creadas manualmente y recuperación.
## 3. Verificación y reparación
```powershell
.\Test-SguClientEnrollment.ps1 `
-RequireDomainJoined `
-RequireRemoteAccess `
-RequireBrokerHealth `
-Enforce
Get-ScheduledTask -TaskName SGU-CredentialProvider-EnrollmentGuard
Start-ScheduledTask -TaskName SGU-CredentialProvider-EnrollmentGuard
```
Un resultado válido exige simultáneamente binario y registro COM, configuración,
certificados, .NET 10, proveedor SGU predeterminado y proveedor de contraseña de
Microsoft preservado. El script de reparación se encuentra en
`C:\ProgramData\SGU\Enrollment` con ACL exclusiva para `SYSTEM` y
administradores.
## 4. Experiencia de LogonUI
El proveedor usa un mosaico genérico dedicado, no una credencial asociada al SID
anónimo de **Other user**. Windows puede mostrar ahora la imagen institucional y
la etiqueta `Universidad La Salle · Acceso SGU`, además del encabezado
`Acceso institucional SGU`. El orden visual exacto de los iconos de opciones lo
decide Windows; lo administrable y exigido es cuál aparece seleccionado por
defecto.
Referencias de Microsoft:
- <https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-admx-credentialproviders#defaultcredentialprovider>
- <https://learn.microsoft.com/en-us/windows/win32/api/credentialprovider/nf-credentialprovider-icredentialprovidercredential2-getusersid>
+6 -1
View File
@@ -18,7 +18,8 @@ put an institutional password on a command line or in a script file.
Set-Location C:\Users\alex\Documents\projects\SGU-CredentialProvider
dotnet restore .\SGU-CredentialProvider.sln
dotnet build .\SGU-CredentialProvider.sln -c Release --no-restore
dotnet test .\SGU-CredentialProvider.sln -c Release --no-build --no-restore
dotnet test --project .\tests\SGU.AuthBroker.Core.Tests\SGU.AuthBroker.Core.Tests.csproj -c Release
dotnet test --project .\tests\SGU.CredentialProvider.Tests\SGU.CredentialProvider.Tests.csproj -c Release
.\scripts\Publish-Lab.ps1
```
@@ -111,6 +112,10 @@ OU on Windows Server. Use separate authorized test accounts for `DO`, `AL`, and
## 5. Install the Credential Provider
For a new client, prefer the provider-first transaction in
[`client-enrollment.md`](client-enrollment.md). The direct installation below is
kept for repair and existing domain members.
On Windows 10:
```powershell
+9
View File
@@ -21,6 +21,11 @@ Resolve-DnsName -Type SRV _ldap._tcp.dc._msdcs.lci.lasalle.mx
## 2. Unir el equipo al dominio
Para equipos SGU nuevos, no ejecutar `Add-Computer` directamente. Usar el flujo
obligatorio de [`client-enrollment.md`](client-enrollment.md), que instala y
valida primero el Credential Provider. Los comandos siguientes quedan como guía
de recuperación o para equipos que no pertenecen al alcance SGU.
Abrir Windows PowerShell como administrador. El prompt solicita la contraseña
de forma interactiva y evita ponerla en el historial:
@@ -85,6 +90,10 @@ contenido. De esta forma se puede preparar una actualización aunque
`LogonUI.exe` todavía tenga cargada la DLL anterior; el reinicio obligatorio
activa la nueva versión.
El instalador también asigna SGU como proveedor predeterminado mediante la
directiva de equipo de Windows. No modifica ni oculta el proveedor de contraseña
de Microsoft.
Bloquear el equipo, abrir **Sign-in options** y elegir el icono azul con llave
del acceso SGU. El proveedor de contraseña de Microsoft debe permanecer visible.