OS2sofd
- Om OS2sofd: https://www.sofd.io/
- Brugervejledning: https://www.sofd.io/brugervejledning/
- Arkitektur: https://www.sofd.io/arkitektur/
- Implementeringsdrejebøger: https://www.sofd.io/implementation-guides/
- Drejebog: OPUS-kommune: https://www.sofd.io/implementation-guides/opus-loen-integration/
- Drejebog: SD-kommune: https://www.sofd.io/implementation-guides/sd-loen-integration/
- Brugerstyring: https://www.sofd.io/idm/
- Forudsætninger og forberedelse: https://www.sofd.io/idm/prerequisites/
- Processer og hændelser: https://www.sofd.io/idm/processes/
- Personinaktivering: https://www.sofd.io/idm/person-inactivation/
- Konfiguration: https://www.sofd.io/idm/configuration/
- Login og SAML: https://www.sofd.io/login/
- API: https://www.sofd.io/api/
- OData (læsning): https://www.sofd.io/api/odata/
- REST-API: https://www.sofd.io/api/rest/
- Fremtidig API-udvikling: https://www.sofd.io/api/strategi/
- Integrationer: https://www.sofd.io/integrationer/
- On-premise agenter: https://www.sofd.io/agents/
- Brugerkonto Agent: https://www.sofd.io/agents/user-account-agent/
- AD Writeback Agent: https://www.sofd.io/agents/ad-writeback-agent/
- AD Replikator Agent: https://www.sofd.io/agents/ad-replikator/
- AD indlæsningsintegration: https://www.sofd.io/agents/ad-indlaesningsintegration/
- OPUS indlæsningsintegration: https://www.sofd.io/agents/opus-indlaesningsintegration/
- Indlæsning af skoleelever: https://www.sofd.io/agents/skoleelev-indlaesning/
- OS2vikar - Brugerkonto Agent: https://www.sofd.io/agents/os2vikar-agent/
- Download: https://www.sofd.io/downloads/
- Ændringslog: https://www.sofd.io/changelog/
- Support og kontakt: https://www.sofd.io/support/
## Indledning
AD Replikator Agent holder OU-strukturen og brugernes placering i Active Directory ajour med organisationen i OS2sofd og kan vedligeholde tilhørende sikkerhedsgrupper. Dette dokument beskriver installation og konfiguration.
| Komponent | Servicenavn | Download | Ændringslog |
| --- | --- | --- | --- |
| AD Replikator Agent | `SofdCoreADReplicator` | [Download](https://www.sofd.io/download/SofdCoreADReplicator.exe) | [Ændringslog](#ændringslog) |
### Forudsætninger
#### Windows Server
Servicen skal installeres på en Windows maskine med:
- Netværksmæssig adgang til kommunens AD
- Netværksmæssig adgang til SOFD Core via HTTPS
#### Service konto i AD
Der skal oprettes en servicekonto, som har lov til at
- Oprette og redigere OU'ere
- Flytte brugere
- Oprette og vedligeholde sikkerhedsgrupper
#### API bruger til SOFD Core backend
Der skal i konfigurationen tilføjes en API nøgle til OS2sofd. Denne oprettes via OS2sofds administrative brugergrænseflade. Integrationen skal have læseadgang til OS2sofd.
## Konfiguration
Start med at installere servicen, og dernæst opsæt konfigurationen. Endeligt kan der knyttes en servicekonto til servicen og servicen kan startes.
### Download service
Hent installeren via download-linket øverst på siden eller fra den samlede [Download-oversigt](../../downloads/).
### Konfiguration af service
Konfiguration af servicen foretages i filen appsettings.json
#### SofdSettings
| Indstilling | Eksempel | Kommentar |
| --- | --- | --- |
| BaseUrl | https://kommune.sofd.io | URL til SOFD installationen |
| ApiKey | xxx | Nøgle til API'et |
| OrgUnitPageSize | 2000 | Max antal enheder der læses ud (sæt til en værdi højere end det samlede antal enheder i OS2sofd) |
| ExcludeFromSyncTagName | | Navnet på det (optionelle) Tag der kan sættes på enheder i OS2sofd, som gør at enheden ikke replikeres til AD |
| PersonsPageSize | 1000 | Antal gange der max læses brugere - de to settings til sammen skal være højere end antallet af brugere i OS2sofd |
| SOFDToADOrgUnitMap | (se eksempel nedenfor) | Mapning mellem OS2sofd UUIDer og AD OUer (distinguishedName). Der skal minimum angives én mapning her (typisk fra rod-enhed i OS2sofd til en OU i OS2sofd), men det er muligt at splitte op i flere mapninger sådan at organisationen i OS2sofd sendes til forskellige steder i AD. |
Eksempel på `SOFDToADOrgUnitMap`:
```json
"SOFDToADOrgUnitMap": {
"sofd_uuid_1": "ad_dn_1",
"sofd_uuid_2": "ad_dn_2"
}
```
#### PAMSettings
| Indstilling | Eksempel | Kommentar |
| --- | --- | --- |
| Enabled | true/false | Angiver om PAM er slået til |
| CyberArkAppId | | AppId til CyberArk api-kald |
| CyberArkSafe | | Safe til CyberArk api-kald |
| CyberArkObject | | Object til CyberArk api-kald |
| CyberArkAPI | | Base url til CyberArk api |
#### ActiveDirectorySettings
| Indstilling | Eksempel | Kommentar |
| --- | --- | --- |
| RootOU | | DN på den OU som hele strukturen skal bygges i. **Indstillingen udfases: Anvend SofdSettings.SOFDToADOrgUnitMap** |
| RootDeletedOusOu | OU=Slettede enheder,DC=kommune,DC=dk | DN på en OU som integrationen skal flytte slettede enheder til |
| RequiredOUFields.OUIdField | adminDescription | Vælg en attribut (single-value tekst attribut) som integrationen kan bruge til at gemme UUID på enheden fra OS2sofd. Dette er et krævet felt. |
| OptionalOUFields.
EanField
EanFieldInherit
StreetAddressField
CityField
PostalCodeField
LosIDField
OrgUnitTypeField | | Valgfri angivelse af AD attributnavne hvor yderligere oplysninger om enheden skal skrives til. |
| TestOURun | true/false | Afvikler OU oprettelse/flytning/omdøbning mv. i test-tilstand hvor der ikke ændres i AD, men kun logges hvad der vil ske. |
| MoveUsersEnabled | true/false | Sæt til "false" hvis man ikke ønsker at flytte brugere (også en god startværdi, indtil man er sikker på at OU strukturen er på plads) |
| DryRunMoveUsers | true/false | Afvikler flytning af brugere i test-tilstand hvor der ikke ændres i AD, men kun logges hvad der vil ske. |
| DontMoveUserRegularExpressions | | Hvis der er brugere som aldrig må flyttes, så kan man angive et regex på de brugernavne som skal være undtaget flytning |
| DontMoveUserFromTheseOUs | true/false | Liste af DN på OUer som der ikke må flyttes brugere fra. |
| ExcludeExternalUsers | true/false | Undtager eksterne brugere for flytning. Med eksterne menes de brugerkonti som er direkte knyttet til et eksternt tilhørsforhold, eller brugere ikke knyttet til et tilhørsforhold, men hvor det primære tilhørsforhold er eksternt. Bemærk at denne indstilling kun gælder **flytning** af brugere, ikke gruppemedlemskab. Eksterne (og vikarer) undtages fra grupper via de tilsvarende indstillinger under den enkelte gruppe-opsætning (se ExcludeExternalUsers / ExcludeSubstituteUsers under GroupSettings nedenfor). |
| GroupSettings | | Se afsnittet nedenfor |
| OUNameReplaceRegexes | ["s/,//","s/[;:]/-/"] | Liste af regulære udtryk i sed-replace-syntaks til at erstatte tegn i OU-navnet. Eksemplet til venstre erstatter alle kommaer med en tom streng samt alle semikoloner og koloner med en bindestreg. |
| OURunScriptOnCreate | C:/scripts/OnOUCreate.ps1 | Sti til script der afvikles efter OU oprettelse. |
| OURunScriptOnDelete | C:/scripts/OnOUDelete.ps1 | Sti til script der afvikles efter OU sletning (flytning til en slettet OU). |
| OURunScriptOnMove | C:/scripts/OnOUMove.ps1 | Sti til script der afvikles efter OU flytning. |
| UserRunScriptOnMove | C:/scripts/OnUserMove.ps1 | Sti til script der afvikles efter bruger flytning. |
#### GroupSettings
Dette afsnit er et optionelt sub-set af ActiveDirectoryConfiguration, og bruges til at oprette og vedligeholde et sæt af AD sikkerhedsgrupper
| Indstilling | Eksempel | Kommentar |
| --- | --- | --- |
| Enabled | true | Slå hele funktionen til/fra |
| DryRun | false | Hvis den sættes til TRUE, så logger den alene ændringer til grupper, men udfører dem ikke |
| UseFastMethod | true/false | Kan sættes til true for at anvende en hurtigere metode til at læse gruppemedlemskaber fra AD. |
| DaysBeforeFirstWorkday | 14 | Angiver hvor mange dage før første arbejdsdag at brugere meldes ind i grupper svarende til deres afdeling. |
| GroupOUDN | OU=Groups,OU=Kommune,DC=dk | Den OU i AD'et hvor alle sikkerhedsgrupperne oprettes. Bemærk at der IKKE må ligge andre grupper i denne OU, da integrationen i så fald vil slette dem. |
| GroupIdField | adminDescription | Den attribut som integrationen bruger til at sætte et unikt ID på gruppen, så den ved hvilken enhed gruppen hører til |
| DirectManagerGroup | | Struktur der beskriver hvordan grupper med ledere for enheder oprettes og vedligeholdes - se detaljer for opsætningen nedenfor |
| DirectMemberGroup | | Struktur der beskriver hvordan grupper med brugere der har direkte tilhørsforhold i enhederne oprettes og vedligeholdes - se detaljer for opsætningen nedenfor |
| InheritedMemberGroup | | Struktur der beskriver hvordan grupper med brugere der har tilhørsforhold til enheder (og alle de underliggende enheder) oprettes og vedligeholdes - se detaljer for opsætningen nedenfor |
| InheritedManagerGroup | | Struktur der beskriver hvordan grupper med ledere for enheder (og alle de underliggende enheder) oprettes og vedligeholdes - se detaljer for opsætningen nedenfor |
| DirectExternalGroup | | Struktur der beskriver hvordan grupper med eksterne brugere der har direkte tilhørsforhold i enhederne oprettes og vedligeholdes - se detaljer for opsætningen nedenfor |
| InheritedExternalGroup | | Struktur der beskriver hvordan grupper med eksterne brugere for enheder (og alle de underliggende enheder) oprettes og vedligeholdes - se detaljer for opsætningen nedenfor |
| DirectSubstituteGroup | | Struktur der beskriver hvordan grupper med vikar brugere der har direkte tilhørsforhold i enhederne oprettes og vedligeholdes - se detaljer for opsætningen nedenfor |
| InheritedSubstituteGroup | | Struktur der beskriver hvordan grupper med vikar brugere for enheder (og alle de underliggende enheder) oprettes og vedligeholdes - se detaljer for opsætningen nedenfor |
> [!NOTE]
> DirectManagerGroup er bagudkompatibel med ManagerGroup og InheritedMemberGroup er bagudkompatible med MemberGroup, således begge navne kan anvendes. Såfremt indstillingen er enablet både med sit nye og bagudkompatible navn, vil indstillingerne med de nye navn blive brugt. Vi anbefaler, at man i videst mulige udstrækning bruger de nyeste navne.
Hver af de 4 typer af grupper har en sektion der angiver hvordan disse skal skabes. Strukturen er ens for hver af disse, og konfigureres på følgende måde
| Indstilling | Eksempel | Kommentar |
| --- | --- | --- |
| Enabled | true | Slå oprettelsen af denne type af grupper til/fra |
| Name | | Hvad skal der stå i name feltet for gruppen |
| SAMaccountName | | Hvad skal der stå i SAMAccountName feltet for gruppen |
| DisplayName | | Hvad skal der stå i displayname feltet for gruppen |
| Description | | Hvad skal der stå i beskrivelsesfeltet for gruppen |
| ExcludeExternalUsers | | Eksterne brugere skal ikke tilføjes til denne gruppe |
| ExcludeSubstituteUsers | | Vikar brugere skal ikke tilføjes til denne gruppe |
| ExcludeOUs | | En liste over OU, som denne gruppe ikke skal indbefatte |
I gruppetypernes indstillinger kan følgende pladsholdere anvendes til at generere gruppens felter.
| Pladsholder | Bør kun anvendes på | Forklaring | Eksempel |
| --- | --- | --- | --- |
| {ID} | Name, SAMaccountName, DisplayName, Description | Enhedens id i SOFD | 1032 |
| {LEVEL} | Name, SAMaccountName, DisplayName, Description | Antal enheder væk fra rod-enheden. Rod-enheden vil returnere 0. | 2 |
| {NAME} | Name, SAMaccountName, DisplayName, Description | Enhedens navn i SOFD | Børn og Unge |
| {PATH[X]} - hvor X er et tal 1 eller større | Name, SAMaccountName, DisplayName, Description | Enheden X niveauer over den gældende enhed. Hvis tallet er større end antallet af enheder til roden, returneres en tom streng. | Direktionsområde Velfærd |
| {PATH[X]} - hvor X ikke er et tal | SAMaccountName, DisplayName, Description | Enhedens fulde sti, separeret af X (så hvis / bruges som separator, vil stien ligne rod-enhed/enhed/enhed). Skal ikke anvendes på Name, da det kan forårsage problemer. | Eksempel Komme/Direktionsområde Velfærd/Børn og Unge |
### Start af service
Efter servicen er konfigureret startes den via Windows Services eller tilsvarende kommandolinjeværktøjer. Servicen hedder `SofdCoreADReplicator` i Windows Services.
Ved start/genstart af servicen foretages altid en fuld synkronisering, og ellers udføres der en fuld synkronisering 2 gange om dagen (lidt før kl 5 om morgenen, og lidt før kl 17 om eftermiddagen).
## Ændringslog
Ændringslog for AD Replikator Agent. Nyeste version øverst.
| Version | Dato | Ændring |
| --- | --- | --- |
| 1.17.1 | 26.06.2026 | Rettet NullReferenceException i simuleret OU-kørsel for endnu ikke-eksisterende OU'er |
| 1.17.0 | 26.06.2026 | Implementeret både direkte og nedarvede eksterne grupper og vikar-grupper; implementeret udelukkelses-muligheder for grupper. |
| 1.16.3 | 15.05.2026 | Rettet gruppe-synkronisering når SOFD har flere rod-OU'er |
| 1.16.2 | 06.01.2026 | Bedre håndtering af specialtegn i gruppenavne |
| 1.16.1 | 15.12.2025 | Bedre håndtering af ugyldige gruppenavne. ID-flettefeltet bruger nu Id-feltet i stedet for MasterId for SOFD-enheder. |
| 1.16.0 | 03.12.2025 | Tilføjet InheritedManager-gruppe samt flettefelterne PATH og LEVEL |
| 1.15.0 | 13.10.2025 | Tilføjet konfigurationsmulighed for at lave OU-navneerstatninger |
| 1.14.1 | 29.09.2025 | Rettelse til håndtering af gruppemedlemskaber for brugere med store bogstaver i brugernavnet |
| 1.14.0 | 25.09.2025 | Yderligere debug-log ved opdatering af grupper |
| 1.13.0 | 06.08.2025 | Performanceforbedring i kald til OS2sofd |
| 1.12.16 | 12.06.2025 | Rettelse til grupper med MANGE medlemmer |
| 1.12.14 | 06.06.2025 | Opdatering af gruppemedlemskaber bør køre hurtigere nu |
| 1.12.13 | 04.06.2025 | Tilføjet konfigurerbar mulighed for at medtage fremtidige tilhørsforhold i gruppemedlemskaber |
| 1.12.10 | 03.06.2025 | Ændrer kun gruppe-attributter når der reelt er ændringer på det pågældende felt |
| 1.12.9 | 03.06.2025 | Rettet problem med ændring af sAMAccountName |
| 1.12.8 | 02.06.2025 | Rettet NPE-fejl ved gruppeopdatering med tomme beskrivelser |
| 1.12.7 | 02.06.2025 | Opdaterer ikke grupper inde i grupper ;) |
| 1.12.6 | 27.05.2025 | Logger ikke længere hele PowerShell-scriptet ved afvikling |
| 1.12.5 | 14.05.2025 | Mapper ikke deaktiverede brugere til grupper, og respekterer "arbejdssteder" |
| 1.12.4 | 09.05.2025 | Respekterer employeeId på User'e ved oprettelse af OU-gruppemedlemskaber |
| 1.12.3 | 08.05.2025 | OU-grupper oprettes nu som universelle |
| 1.12.2 | 07.05.2025 | Rettet fejl i manager-mapping for OU-grupper |
| 1.12.0 | 05.05.2025 | Understøttelse af oprettelse og vedligehold af OU-grupper |
| 1.11.0 | 11.03.2025 | Simuleringstilstand for OU'er |
| 1.10.1 | 04.03.2025 | Håndterer "boble-op" for brugere i udelukkede OU'er |
| 1.9.1 | 10.02.2025 | Rettet PowerShell-assembly-afhængighed |
| 1.9.0 | 20.12.2024 | Tilføjet konfigurationsindstilling for OU'er, som brugere ikke må flyttes væk fra |
| 1.8.0 | 25.11.2024 | Kan nu udelukke eksterne brugere i konfigurationen |
| 1.7.0 | 19.10.2024 | Tilføjet understøttelse af PowerShell-scripts |
| 1.6.2 | 15.10.2024 | Rettet problem med specialtegn i OU-navne ved omdøbning/flytning |
| 1.6.1 | 19.09.2024 | Tilføjet noget logning |
| 1.6.0 | | Tilføjet understøttelse af CyberArk (Privileged Access Management) |
| 1.5.0 | | Tilføjet understøttelse af flere tegn i OU-navne (fx komma) |
| 1.4.1 | | Fejlrettelse i OrgUnit-rod-mapping |
| 1.4.0 | | Understøtter DisplayName for OU'er |
| 1.3.0 | | Understøttelse af flere organisationsgrene. Kodesignering. |
| 1.2.1 | | Forsøger at fjerne deletion protect-flaget på OU'er før flytning |
| 1.2.0 | | Understøtter skrivning af LOS ID til et konfigurerbart felt på OU'en |
| 1.1.1 | | RegEx er ikke længere versalfølsom |
| 1.1.0 | | Understøtte non-root root :) |
| 1.0.0 | | Første version |