Add branded default provider and enforced enrollment
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user