...
Die primedocs.config
-Datei ist die zentrale Konfigurationsdatei für die serverseitige serverseitigen primedocs Applikationen. Sie befindet sich im Installationsverzeichnis (standardmässig unter C:\inetpub\wwwroot\primedocs\primedocs.config
).
...
Beachten Sie, dass eine falsche Konfiguration zu Fehlern führen kann und das dass gewisse Features auch lizenztechnisch relevant sind - fragen ! Fragen Sie hierfür unseren Support an!.
Nachfolgend befinden sich Beispiele:
...
Note |
---|
Die GUIDs, Passwörter, Secrets, URLs und ConnectionStrings sollten nicht vom obigen Beispiel übernommen werden. |
Standard-Installation
Die Standard OnPrem-Installation setzt auf die Windows AuthenticationAufthentifzierung.
Code Block | ||
---|---|---|
| ||
<primedocs operationDbConnectionString="Data Source=your-sql-server.yourcorp.local;Initial Catalog=primedocs_Prod_Operation;User ID=primedocsuser;Password=password_here;MultipleActiveResultSets=True" databaseLoggingEnabled="false"> <datasources> <add id="9e769582-b411-43fa-b8f6-d15ea3d83dde" isPrimary="true" dbConnectionString="Data Source=your-sql-server.yourcorp.local;Initial Catalog=primedocs_Prod;User ID=primedocsuser;Password=password_here;MultipleActiveResultSets=True;Encrypt=False" name="primedocs" /> </datasources> <clients> <!-- Windows Client OIDC Settings --> <add id="710be047-475a-4991-90b3-351ea93d6908" oidcClientId="DefaultClient" oidcClientSecret="G754ePPG0SBC" userAuthType="FromLogin" /> <!-- WebApi to invoke the Connect (DCS) --> <add id="84234199-5448-4d73-8182-b5623e51e99c" basicAuth="CONNECT-USER:izieAoETHS04" mappedToPrimarySid="CONNECT-USER" /> </clients> <apps> <add id="e185dddd-2cb4-43e2-a6fe-cf4272dd3401" name="Service" url="https://your-url.local/service/" logFilePath="Service\" type="Service" /> <add id="9ef34d3a-13b5-4f06-b437-b300474beb6d" name="IdentityServer" url="https://your-url.local/ids/" logFilePath="IdS\" type="IdentityServer" /> <add id="c74a324d-7c36-4d2f-b422-f2fdad41f81e" name="HealthMonitor" url="https://your-url.local/healthmonitor/" type="HealthMonitor" /> <add id="f7199131-de81-4d40-a254-39e7db9660f0" name="DataSourceAdminApp" url="https://your-url.local/datasourceadminapp/" logFilePath="DataSourceAdminApp\" type="DataSourceAdminApp" /> <add id="279b5480-27e5-4a09-bf9f-4c10d1770c76" name="App" url="https://your-url.local/app/" logFilePath="App\" type="App" /> <add id="f25dc7b9-d989-4d03-89ff-3ee17bf7d020" name="JobHost" logFilePath="JobHost\" type="JobHost" /> <add id="1cdca9fc-780b-477e-af20-29be64bf8dae" name="Connect" url="https://your-url.local/connect/" logFilePath="Connect\" type="Connect" /> <add id="1d28ed6f-74d4-4942-b254-b287db6e1cf9" name="AddressService" url="https://your-url.local/addressservice/" logFilePath="AddressService\" type="AddressService" /> <add id="a7ee7e49-b0eb-472c-aecb-cc0ca5257342" name="WebApi" url="https://your-url.local/webapi/" logFilePath="WebApi\" type="WebApi" /> <add id="822a4c62-ed2d-4165-9bb1-eb979632c0aa" name="AdminApp" url="https://your-url.local/adminapp/" logFilePath="AdminApp\" type="AdminApp" /> </apps> <identity signingCertFilePath="cert.pfx" signingCertPassword="kWFgDhRAMgKk" introspectionSecret="1Ubp4Efp6H3G"> <providers> <winAuth authority="https://your-url.local/IdSWindowsAuth" clientId="winauth" clientSecret="winauth-L2VDmPzm7PbK" /> </providers> </identity> <service streamBufferSizeInBytes="81920"> <syncBehavior maxConcurrentClients="30" initialAverageSyncTimeInSeconds="10" timeoutInSeconds="120" /> </service> <healthMonitor basicAuth="user:YHBAe5oAwsi2" clientSecret="healthmonitor-s5iZRGCWZ7ZE" intervalInSeconds="600"/> </primedocs> |
...
Möchten Sie anstelle der Windows Authentifizierung sich über Ihr Ihre Entra ID (ehemals Azure Active Directory) anmelden, folgen Sie den Schritten unter Entra ID Apps.
Die clientId/clientSecret
für die “Benutzer-Anwendung” als auch die clientId/clientSecret
für den Zugriff auf die DataSourceAdminApp (Dashboard) muss in der primedocs.config
hinterlegt werden:
Code Block | ||
---|---|---|
| ||
<primedocs operationDbConnectionString="Data Source=your-sql-server.yourcorp.local;Initial Catalog=primedocs_Prod_Operation;User ID=primedocsuser;Password=password_here;MultipleActiveResultSets=True" databaseLoggingEnabled="false"> <datasources> <add id="9e769582-b411-43fa-b8f6-d15ea3d83dde" isPrimary="true" dbConnectionString="Data Source=your-sql-server.yourcorp.local;Initial Catalog=primedocs_Prod;User ID=primedocsuser;Password=password_here;MultipleActiveResultSets=True;Encrypt=False" name="primedocs" allowedForTenant="{TENANTGUID}" /> </datasources> <clients> <!-- Windows Client OIDC Settings --> <add id="710be047-475a-4991-90b3-351ea93d6908" oidcClientId="DefaultClient" oidcClientSecret="G754ePPG0SBC" userAuthType="FromLogin" /> <!-- WebApi to invoke the Connect (DCS) --> <add id="84234199-5448-4d73-8182-b5623e51e99c" basicAuth="CONNECT-USER:izieAoETHS04" mappedToPrimarySid="CONNECT-USER" /> </clients> <apps> <add id="e185dddd-2cb4-43e2-a6fe-cf4272dd3401" name="Service" url="https://your-url.local/service/" logFilePath="Service\" type="Service" /> <add id="9ef34d3a-13b5-4f06-b437-b300474beb6d" name="IdentityServer" url="https://your-url.local/ids/" logFilePath="IdS\" type="IdentityServer" /> <add id="c74a324d-7c36-4d2f-b422-f2fdad41f81e" name="HealthMonitor" url="https://your-url.local/healthmonitor/" type="HealthMonitor" /> <add id="f7199131-de81-4d40-a254-39e7db9660f0" name="DataSourceAdminApp" url="https://your-url.local/datasourceadminapp/" logFilePath="DataSourceAdminApp\" type="DataSourceAdminApp" /> <add id="279b5480-27e5-4a09-bf9f-4c10d1770c76" name="App" url="https://your-url.local/app/" logFilePath="App\" type="App" /> <add id="f25dc7b9-d989-4d03-89ff-3ee17bf7d020" name="JobHost" logFilePath="JobHost\" type="JobHost" /> <add id="1cdca9fc-780b-477e-af20-29be64bf8dae" name="Connect" url="https://your-url.local/connect/" logFilePath="Connect\" type="Connect" /> <add id="1d28ed6f-74d4-4942-b254-b287db6e1cf9" name="AddressService" url="https://your-url.local/addressservice/" logFilePath="AddressService\" type="AddressService" /> <add id="a7ee7e49-b0eb-472c-aecb-cc0ca5257342" name="WebApi" url="https://your-url.local/webapi/" logFilePath="WebApi\" type="WebApi" /> <add id="822a4c62-ed2d-4165-9bb1-eb979632c0aa" name="AdminApp" url="https://your-url.local/adminapp/" logFilePath="AdminApp\" type="AdminApp" /> </apps> <identity signingCertFilePath="cert.pfx" signingCertPassword="kWFgDhRAMgKk" introspectionSecret="1Ubp4Efp6H3G"> <providers> <office365Auth authority=" https://login.microsoftonline.com/{TENANTGUID}" clientId="{CLIENTID}" clientSecret="{CLIENTSECRET}" microsoftAppDelegateScopes="email openid profile User.Read offline_access" /> <!-- AzureAD App for authentication instead of hardcoded admins --> <dataSourceAdminAppAuth clientId="{CLIENTID-DATASOURCEADMINAPP}" clientSecret="{CLIENTSECRET-DATASOURCEADMINAPP}" authority=" https://login.microsoftonline.com/{TENANTGUID}" microsoftAppDelegateScopes="email openid profile offline_access" /> </providers> </identity> <service streamBufferSizeInBytes="81920"> <syncBehavior maxConcurrentClients="30" initialAverageSyncTimeInSeconds="10" timeoutInSeconds="120" /> </service> <healthMonitor basicAuth="user:YHBAe5oAwsi2" clientSecret="healthmonitor-s5iZRGCWZ7ZE" intervalInSeconds="600"/> </primedocs> |
Info |
---|
Beachten Sie, dass die |
Without-IdS-Variante
...
language | xml |
---|
...
Entra Id - Authority: Tenant vs. Common-Endpoint
Über die Konfiguration <office365Auth authority="https://login.microsoftonline.com/{TENANTGUID}" ... />
zeigt die primedocs Instanz auf den Entra Id Tenant. Alle Benutzer und Gruppen in diesem Entra ID Mandant sind dann nutzbar inkl. Gast-Benutzer.
Grundsätzlich kann die primedocs Instanz auch in einen “Multitenancy” Modus versetzt werden, in dem Fall zeigt die Konfiguration auf den Common-Endpoint https://login.microsoftonline.com/common/v2.0/
. Hierbei muss auch die Entra ID Apps App Registration für Multitenancy
registriert werden.
Diese Konfigration kann bei “Plattform-Betreibern” genutzt werden um mehrere Mandaten über eine primedocs Instanz nutzbar zu machen.
...
Without-IdS-Variante
Code Block | ||
---|---|---|
| ||
<primedocs> <datasources> <add id="7e132bcb26735c39-b0883d6e-4cb244c6-b717b701-30174884b8f4f5ab6cc429fd" nameisPrimary="Servicetrue" urldbConnectionString="https://Data Source=your-url.local/service/" logFilePath="Service\" type="Servicesql-server.yourcorp.local;Initial Catalog=primedocs_Prod;User ID=primedocsuser;Password=password_here;MultipleActiveResultSets=True;Encrypt=False" name="primedocs" /> </datasources> <add id=" <apps> <add id="7e132bcb-b088-4cb2-b717-30174884b8f4" name="Service" url="https://your-url.local/service/" logFilePath="Service\" type="Service" /> <add id="60e0654e-9e62-4df2-8b24-4d00f2677cfa" name="HealthMonitor" url="https://your-url.local/healthmonitor/" type="HealthMonitor" /> <add id="80e85dff-e533-42df-b8f3-930598d9b955" name="JobHost" logFilePath="JobHost\" type="JobHost" /> <add id="f7199131-de81-4d40-a254-39e7db9660f0" name="DataSourceAdminApp" url="https://your-url.local/datasourceadminapp/" logFilePath="DataSourceAdminApp\" type="DataSourceAdminApp" /> <add id="c5667157-6cce-4da6-93ce-464b68947349" name="Connect" url="https://your-url.local/connect/" logFilePath="Connect\" type="Connect" /> <add id="7ee9d094-e728-4e36-91ea-8fb64aa6b765" name="AddressService" url="https://your-url.local/addressservice/" logFilePath="AddressService\" type="AddressService" /> </apps> <service streamBufferSizeInBytes="81920"> <syncBehavior maxConcurrentClients="30" initialAverageSyncTimeInSeconds="10" timeoutInSeconds="120" /> </service> <healthMonitor basicAuth="user:iPvKHKDmvlwP" clientSecret="healthmonitor-k9VBA5TXke9P" intervalInSeconds="600"/> </primedocs> |
cert.pfx
Das in der primedocs.config
angegebene cert.pfx
dient der Signierung der Authentifizierungstokens und hat keinen Bezug zu TLS/SSL Zertifikaten.
Generiert wird das Zertifikat während der Installation, grundsätzlich wird hierbei das Zertifikat mit diesen Parametern generiert:
...
Datenquellen (“datasources”)
In den “Datenquellen” (datasources
) werden alle Daten von primedocs gespeichert. In den meisten Fällen enthält eine primedocs Instanz eine Datenquelle, welche als isPrimary
markiert ist.
Es gibt die Möglichkeit mehrere Datenquellen zu hinterlegen, sodass z.B. Produktiv- und Testsysteme auf einer Instanz hinterlegt werden können oder das es für verschiedene Abteilungen verschiedene Datenquellen gibt.
Beispiel mehrerer Datenquellen für Produktiv- und Testsystem mit Windows Authentifizierung:
Code Block |
---|
<datasources> $characters<add id= "abcdefghiklmnoprstuvwxyzABCDEFGHKLMNOPRSTUVWXYZ0123456789".ToCharArray() For ($loop = 1; $loop -le $length; $loop++) { $randomString += ($characters | Get-Random) } return $randomString } $certPath = "C:\Temp\cert.pfx" $certificatePassword = randomString(12) $certificatePasswordSecureString = ConvertTo-SecureString -String $certificatePassword -Force -AsPlainText $certificateDefaultName = "PrimeDocsIdSCert" $HT = @{ Subject="CN=$certificateDefaultName"; KeyLength = 2048; HashAlgorithm = 'SHA256'; KeyUsage = 'DigitalSignature'; KeyExportPolicy = 'Exportable'; KeySpec = 'Signature'; NotAfter = (Get-Date).AddYears(10) ; TextExtension = '2.5.29.37={text}1.3.6.1.5.5.7.3.3'; CertStoreLocation='cert:\localmachine\my'; } $certificate = New-SelfSignedCertificate @HT $certificatePath = 'cert:\localMachine\my\' + $certificate.thumbprint Export-PfxCertificate -cert $certificatePath -FilePath $certPath -Password $certificatePasswordSecureString Get-ChildItem Cert:\LocalMachine\My | Where-Object { $_.Subject -match $certificateDefaultName } | Remove-Item Write-Host "Created certificate file with password '$certificatePassword' created as $certPath" |
Admin API
Über die Admin API können Drittsysteme auf die APIs von primedocs zugreifen. Hierfür ist eine solche Registrierung in der primedocs.config
notwendig:
Code Block |
---|
<primedocs> ... <clients> <add id="[GUID]" oidcClientId="CustomApiClient" oidcClientSecret="CustomClient_Secret_123" userAuthType="FromConfigAdminApi" /> </clients> ... </primedoc>"26735c39-3d6e-44c6-b701-f5ab6cc429fd" isPrimary="true" dbConnectionString="Data Source=your-sql-server.yourcorp.local;Initial Catalog=primedocs_Prod;User ID=primedocsuser;Password=password_here;MultipleActiveResultSets=True;Encrypt=False" name="primedocs - Prod" /> <add id="9ce36252-0e25-4f40-a760-cd70dcfe124a" isPrimary="false" dbConnectionString="Data Source=your-sql-server.yourcorp.local;Initial Catalog=primedocs_Test;User ID=primedocsuser;Password=password_here;MultipleActiveResultSets=True;Encrypt=False" name="primedocs - Test" /> </datasources> |
Note |
---|
Beachten Sie, dass bei der Authentifizierung über Entra Id die |
“Multitenancy”-Modus
In der Standardeinstellung, sind alle Datenbanken für jeden Benutzer der primedocs Instanz sichtbar. Möchte man allerdings Datenbanken nur für bestimmte Benutzergruppen freigeben kann man dies über das Attribut allowedForGroups="..."
steuern.
Hierbei ist es wichtig, dass keine Datenquelle mehr mit isPrimary="true"
konfiguriert ist. Die “primäre Datenquelle” ist dann jeweils die erste Datenquelle, welche für den Benutzer in Frage kommt.
Über das Attribut allowedForGroups
können kommasepariert (x,y
) Gruppen SIDs bzw. Entra ID Group Ids angegeben werden. Zusätzlich kann ein *
als Wildcard hinzugefügt werden.
Beispiel mit Windows Authentifizierung:
Alle sehen die Produktivdatenquelle, aber nur Benutzer in der Gruppe mit der SID S-1-5-21-2445566778-2513070483-412345678-11111
und S-1-5-21-2445566778-2513070483-412345678-22222
sehen die Testdatenquelle
Code Block |
---|
<datasources>
<add id="26735c39-3d6e-44c6-b701-f5ab6cc429fd" dbConnectionString="Data Source=your-sql-server.yourcorp.local;Initial Catalog=primedocs_Prod;User ID=primedocsuser;Password=password_here;MultipleActiveResultSets=True;Encrypt=False"
allowedForGroups="*"
name="primedocs - Prod" />
<add id="9ce36252-0e25-4f40-a760-cd70dcfe124a" dbConnectionString="Data Source=your-sql-server.yourcorp.local;Initial Catalog=primedocs_Test;User ID=primedocsuser;Password=password_here;MultipleActiveResultSets=True;Encrypt=False"
allowedForGroups="S-1-5-21-2445566778-2513070483-412345678-11111,S-1-5-21-2445566778-2513070483-412345678-22222"
name="primedocs - Test" />
</datasources> |
Beispiel mit Entra ID:
Ähnliches Szenario, aber allowedForTenant
muss angegeben sein und die Gruppen IDs entsprechen den Object Ids aus dem Entra Id.
Code Block |
---|
<datasources>
<add id="26735c39-3d6e-44c6-b701-f5ab6cc429fd" dbConnectionString="Data Source=your-sql-server.yourcorp.local;Initial Catalog=primedocs_Prod;User ID=primedocsuser;Password=password_here;MultipleActiveResultSets=True;Encrypt=False"
allowedForTenant="c86d1b74-6646-4efa-b2ce-60f4e21bf740"
allowedForGroups="*"
name="primedocs - Prod" />
<add id="9ce36252-0e25-4f40-a760-cd70dcfe124a" dbConnectionString="Data Source=your-sql-server.yourcorp.local;Initial Catalog=primedocs_Test;User ID=primedocsuser;Password=password_here;MultipleActiveResultSets=True;Encrypt=False"
allowedForTenant="c86d1b74-6646-4efa-b2ce-60f4e21bf740"
allowedForGroups="c1d880da-2e18-4e7e-b764-2346653a4a2e,970d75da-a393-4ad4-a19c-2ce14793bace"
name="primedocs - Test" />
</datasources> |
Für diese Konfiguration muss in der Entra ID Apps der groups-Claim
zusätzlich konfiguriert werden:
...
cert.pfx
Das in der primedocs.config
angegebene cert.pfx
dient der Signierung der Authentifizierungstokens und hat keinen Bezug zu TLS/SSL Zertifikaten.
Generiert wird das Zertifikat während der Installation. Grundsätzlich wird hierbei das Zertifikat mit diesen Parametern generiert:
Code Block |
---|
function randomString([int]$length) {
$characters = "abcdefghiklmnoprstuvwxyzABCDEFGHKLMNOPRSTUVWXYZ0123456789".ToCharArray()
For ($loop = 1; $loop -le $length; $loop++) {
$randomString += ($characters | Get-Random)
}
return $randomString
}
$certPath = "C:\Temp\cert.pfx"
$certificatePassword = randomString(12)
$certificatePasswordSecureString = ConvertTo-SecureString -String $certificatePassword -Force -AsPlainText
$certificateDefaultName = "PrimeDocsIdSCert"
$HT = @{
Subject="CN=$certificateDefaultName";
KeyLength = 2048;
HashAlgorithm = 'SHA256';
KeyUsage = 'DigitalSignature';
KeyExportPolicy = 'Exportable';
KeySpec = 'Signature';
NotAfter = (Get-Date).AddYears(10) ;
TextExtension = '2.5.29.37={text}1.3.6.1.5.5.7.3.3';
CertStoreLocation='cert:\localmachine\my';
}
$certificate = New-SelfSignedCertificate @HT
$certificatePath = 'cert:\localMachine\my\' + $certificate.thumbprint
Export-PfxCertificate -cert $certificatePath -FilePath $certPath -Password $certificatePasswordSecureString
Get-ChildItem Cert:\LocalMachine\My | Where-Object { $_.Subject -match $certificateDefaultName } | Remove-Item
Write-Host "Created certificate file with password '$certificatePassword' created as $certPath" |
...
Logging
primedocs nutzt NLog
für das Logging. Standardmässig loggen alle Server-Applikationen in den Installationsordner und erzeugen eine serverApp.oolog
Datei (bis maximal 7 Stück, pro Tag eine).
Es ist ebenfalls möglich in die “Operation-Datenbank” (operationDbConnectionString
) zu loggen. Hierfür benötigt diese Einstellung:
Code Block | ||
---|---|---|
| ||
<primedocs operationDbConnectionString="..."
databaseLoggingEnabled="true">
... |
Warnungen und Fehler werden danach in die Datenbank geschrieben.
Achtung: Dies funktioniert nur, wenn die NLog.config
Dateien nicht manipuliert wurden.
Grundsätzlich ist es aber kein Problem, wenn man die NLog.config
Datei auf seine eigenen Bedürfnisse anpasst.
...
Admin API
Über die Admin API können Drittsysteme auf die APIs von primedocs zugreifen. Hierfür ist eine folgende Registrierung in der primedocs.config
notwendig:
Code Block |
---|
<primedocs>
...
<clients>
<add id="[GUID]" oidcClientId="CustomApiClient" oidcClientSecret="CustomClient_Secret_123" userAuthType="FromConfigAdminApi" />
</clients>
...
</primedoc> |
...
Connect API
Über die Connect API können Drittsysteme serverseitig die Dokumentgenerierung von primedocs nutzen. Hierfür ist eine folgende Registrierung in der primedocs.config
notwendig:
Code Block |
---|
<primedocs>
...
<clients>
<add id="[GUID]" oidcClientId="CustomApiClient" oidcClientSecret="CustomClient_Secret_123" userAuthType="FromConfigConnectApi" />
</clients>
...
</primedoc> |
...
Teams / Office / Outlook Integration
Die Integration in Teams sowie die Unterstützung der neuen Office.js-basierten AddIns in Office (Word/PowerPoint/Excel) sowie Outlook muss über die primedocs.config
aktiviert werden.
Als id
kann jede beliebige GUID verwendet werden.
Code Block |
---|
<primedocs>
...
<teams id="[GUID]" namePrefix="" />
<officeAddin id="[GUID]" namePrefix="" />
<outlookAddin id="[GUID]" namePrefix="" />
</primedocs> |
Der namePrefix
kann genutzt werden, wenn es mehrere Umgebungen gibt. Die AddIns sind dann in der Form {namePrefix} primedocs
benannt.
Im Anschluss kann das Manifest für das Deployment über diese URLs bezogen werden:
Produkt | Manifest URL | Installationsanleitung |
---|---|---|
Teams |
| |
Office |
| |
Outlook |
|
Das Manifest kann dann über die Teams bzw. Office Administration verteilt werden.
...
primedocs AI (Preview)
Für die primedocs AI muss folgende Konfiguration in der primedocs.config hinterlegt werden:
Code Block |
---|
<primedocs>
...
<openAi endpoint="https://....openai.azure.com/"
key="..."
modelDeploymentName="..." />
</primedocs> |
Zusätzlich können im DataSourceAdminApp vordefinierte Prompts hinterlegt werden:
Code Block |
---|
<Prompts>
<Prompt title="Translate to EN" icon="fi-gb" >Translate this given text to English</Prompt>
<Prompt title="Translate to FR" icon="fi-fr">Translate this given text to French</Prompt>
...
</Prompts> |